获取请求中的参数,nodejs的 express框架 提供了四种方法来实现。
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) {
}];
}
*********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":"csdnnnn"
}],
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=lamboconsole.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');//解释参考http://blog.youkuaiyun.com/yanyang1116/article/details/54847560
// 创建 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":"csdnnnn"
}],
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');//解释参考http://blog.youkuaiyun.com/yanyang1116/article/details/54847560
// 创建 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>