获取请求中的参数,nodejs的 express框架 提供了四种方法来实现。

    

  1. req.body----解析body不是nodejs默认提供的,需要载入body-parser中间件才可以使用req.body;此方法通常用来解析POST请求中的数据.
    2. querystring--使用于post请求--var querystring = require('querystring'); querystring.parse(post)
    3.req.query-----nodejs默认提供,无需载入中间件;多用于解析get请求的参数;
    4.req.params----nodejs默认提供,无需载入其他中间件;多适用于restful风格url中的参数的解析,req.query与req.params的区别,req.params包含路由参数(在URL的路径部分),而req.query包含URL的查询参数(在URL的?后的参数)


======get请求====

在终端中执行node /Users/wofu/Desktop/node/app.js人如果出现上面的Server running at http://127.0.0.1:8000/就说明成功了


//iOS 端发出的请求:

-(void)post{
    NSLog(@"POST请求");
    NSString *url=@"http://127.0.0.1:8081/post";
    NSDictionary *params=@{@"name":@"lambo",
                           @"age":@"20"
                           };
    [NetworkManager postRequestWithUrl:url params:params successBlock:^(NSURLSessionDataTask *task, id responseObject) {
        
    } failureBlock:^(NSURLSessionDataTask *task, NSError *error) {
        
    }];
    
}
-(void)get{
    NSLog(@"get请求");
    //加参数方法一:
//    NSString *url=[@"http://127.0.0.1:8081/get" stringByAppendingString:@"?name=lambo&age=20"];
    
//加参数方法二
    NSString *url=@"http://127.0.0.1:8081/get";
    NSDictionary *params=@{@"name":@"lambo",@"age":@"20"};
    
    [NetworkManager gettRequestWithUrl:url params:params successBlock:^(NSURLSessionDataTask *task, id responseObject) {
        
    } failureBlock:^(NSURLSessionDataTask *task, NSError *error) {
        
    }];

    
}




导入express:npm install express

*********app.js**********

创建服务器,分发路由:

var express = require('express');
var app = express();//创建express实例
var routes=require('./routes/get.js');//吧路由引入;  ./ 代表项目的当前总目录 /Users/wofu/Desktop/node
// var routes=require('./routes/post.js');//吧路由引入;  ./ 代表项目的当前总目录 /Users/wofu/Desktop/node
routes.router(app);//调用路由
var server = app.listen(8081, function () {


  var host = server.address().address;
  var port = server.address().port;
  console.log(__dirname);//这里的目录就是/Users/wofu/Desktop/node,其中node文件夹我是直接放在了桌面
console.log(host);//主机地址
console.log(port);//端口号
  console.log("应用实例,访问地址为 http://%s:%s", host, port);
});

get请求:

var router = function(app){
  var url = require('url');
    app.get('/get', function (req, res) {
      // res.writeHeader(200, {'Content-Type':'text/html;charset=UTF-8'});
      // res.writeHeader(200, {'Content-Type':'text/plain;charset=UTF-8'});
      res.writeHeader(200, {'Content-Type':'application/json;charset=UTF-8'});
      // res.writeHeader(200, {'Content-Type':'text/json;charset=UTF-8'});

//************获取参数和url
console.log(req.url);//******结果:   /get?age=20&name=lambo
 console.log(url.parse(req.url).pathname);// ***结果:/get ***需要先引入 var url = require('url');
 console.log(url.parse(req.url).query);// ***结果:age=20&name=lambo *** 需要先引入   var url = require('url');
 console.log(req.query);//{ name: 'lambo', age: '20' }
 console.log(req.query.name);// lambo
//************
       // 输出 JSON 格式
       var json = JSON.stringify({
           msg:"成功",
           result:[{
                    "name":"菜鸟教程",
                     "site":"http://www.runoob.com"
                   },{
                     "name":"新手教程",
                     "site
                   }],
           status:1
});

// res.write(json);//如果要在浏览器上显示就用这个,并且还要加上res.end()方法;否则网页一直在加载;
res.end(json);//如果要传给前端数据(这时就不能执行 res。write() 方法),一定要用这个方法,这个方法也可以在浏览器上显示;
    })
};
exports.router = router;

吧下面的方法放在router方法中:用来返回当路由不存在的时候返回提示:

app.use(function  (req,res,next) {         // 设置404页面,如果路由不存在,就执行这个监听
    res.status(404); 

    res.send('404 - Not Found') 

  });



************routes.js****************

表单提交get请求:

var router = function(app){
  // Express 提供了内置的中间件 express.static 来设置静态文件如:图片, CSS, JavaScript 等。
  // 你可以使用 express.static 中间件来设置静态文件路径。例如,如果你将图片, CSS, JavaScript 文件放在 public 目录下,你可以这么写:
  // app.use(express.static('public'));


    app.get('/one', function (req, res) {
       res.sendFile("/Users/wofu/Desktop/node/views" + "/" + "one.html" );//显示静态网页
    })
    //这一个是表单提交后请求的
    app.get('/two', function (req, res) {
       // 输出 JSON 格式
       var response = {
           "first_name":req.query.first_name,//从请求中获取的参数
           "last_name":req.query.last_name//从请求中获取的参数
       };
       console.log(response);//控制台打印的json
       res.end(JSON.stringify(response));//输出一个json对象到浏览器
    })
};
exports.router = router;

获取get参数:

console.log(req.url);///one?name=lambo
console.log(url.parse(req.url).pathname);//  /one
 
 console.log( 
url.parse(req.url).query 
);//  name=lambo
 console.log( 
req.query 
);//{ name: 'lambo' }
 console.log( 
req.query.name 
);//lambo 
***********one.html***********
<html>
<body>
<form action="http://127.0.0.1:8081/two" method="GET">
First Name: <input type="text" name="first_name">  <br>
Last Name: <input type="text" name="last_name">
<input type="submit" value="Submit">
</form>
</body>
</html>

===================POST请求==============


var router = function(app){
  var bodyParser = require('body-parser');//解释参考

// 创建 application/x-www-form-urlencoded 编码解析
var urlencodedParser = bodyParser.urlencoded({ extended: false })

app.post('/post', urlencodedParser, function (req, res) {//第二个参数是用一种解析方式解析
console.log(req.body);//{ age: '20', name: 'lambo' }---body是从客户端传过来的参数
console.log(req.body.name);//lambo----参数name的值
 // 输出 JSON 格式
 var json = JSON.stringify({
     msg:"成功",
     result:[{
              "name":"菜鸟教程",
               "site":"http://www.runoob.com"
             },{
               "name":"新手教程",
               "site
             }],
     status:1
});
// res.write(json);//如果要在浏览器上显示就用这个,并且还要加上res.end()方法;否则网页一直在加载;
res.end(json);//如果要传给前端数据(这时就不能执行 res。write() 方法),一定要用这个方法,这个方法也可以在浏览器上显示;
});
};
exports.router = router;

*********** routes.js***********************

表单提交post请求:

body-parse解析post请求参数:

var router = function(app){

  // Express 提供了内置的中间件 express.static 来设置静态文件如:图片, CSS, JavaScript 等。
  // 你可以使用 express.static 中间件来设置静态文件路径。例如,如果你将图片, CSS, JavaScript 文件放在 public 目录下,你可以这么写:
  // app.use(express.static('public'));


  var bodyParser = require('body-parser');//解释参考


// 创建 application/x-www-form-urlencoded 编码解析
var urlencodedParser = bodyParser.urlencoded({ extended: false })

app.get('/one', function (req, res) {
 res.sendFile( "/Users/wofu/Desktop/node/views" + "/" + "one.html" );
})

app.post('/two', urlencodedParser, function (req, res) {//第二个参数是用一种解析方式解析

 // 输出 JSON 格式
 var response = {
     "first_name":req.body.first_name,
     "last_name":req.body.last_name
 };
 console.log(response);
 res.end(JSON.stringify(response));
})
};
exports.router = router;
***********querystring解析post请求参数—*****************************************
app.post('/one',function (req, res) {
var post=''; 
req.on('data',function(chunk){
  post +=chunk; 
});
req.on('end',function(){//req的data事件监听
post=querystring.parse(post);
console.log('收到参数email:'+post['email']); 
});});



*******one.html****************

<html>
<body>
<form action="http://127.0.0.1:8081/two" method="POST">
First Name: <input type="text" name="first_name">  <br>


Last Name: <input type="text" name="last_name">
<input type="submit" value="Submit">
</form>
</body>
</html>