中间件morgan
https://github.com/expressjs/morgan#url
- morgan 是用来展示http请求的这么一个中间件
var logger = require('morgan');
app.use(logger('dev'));
中间件body-parser
bodyParser用于解析客户端请求的body中的内容,内部使用JSON编码处理,url编码处理.
var bodyParser = require('body-parser');
//解析json,解析的content-type 等于application/json
app.use(bodyParser.json()); // for parsing application/json
//解析表单传输的数据,解析的content-type 等于application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
app.post('/', function (req, res) {
console.log(req.body);
res.json(req.body);
})
req取参数的3种方法
传参的方式
1. 路径中通过url的地址 127.0.0.1:3000/getData/2/
2. get请求的url地址的后面使用?分隔后面加 name=zyc&password=123
req.params
req.body
req.query
1,
req.params
//用get请求传输过来的参数
app.get('/user/:id', function(req, res){
res.send('user ' + req.params.id);
});
注意点:取带冒号的参数
2,
req.body
可以肯定的一点是req.body一定是post请求,express里依赖的中间件必须有bodyParser,不然req.body是没有的。
3,
req.query
query是querystring
说明req.query不一定是get
// GET /search?q=tobi+ferret
req.query.q
// => "tobi ferret"
get 请求传参数的方式
1. 地址栏里面写url 127.0.0.1:3000/getData/123
后台接参数 通过在请求路径的字符串中添加:+参数名的形式去写
app.get('/getData/:num',function(req,res){
req.params.num
})
应用场景比如:
1. 小说网站通过地址栏里面的参数变化,修改请求小说的章节
2. qq空间通过地址栏的不一样,请求到不同人的空间
3. 分页
2. 地址栏里面用url加?的形式传参 127.0.0.1:3000/getData?name="zyc"&age=88
app.get('/getData',function(req,res){
console.log(req.query.name);
})
2. post 接收参数 post是通过报文体去传参
1. 先要加载body-parser中间件
2. 使用body-parser中间件里面的两个方法去接收参数
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
3. 从req.body中去取值
应用场景:表单的提交,重要的内容
3. 变态的写法
使用post请求,但是要从url上面去传参
1. ajax的post请求里面写url 127.0.0.1:3000/getData/123
后台接参数 通过在请求路径的字符串中添加:+参数名的形式去写
app.post('/getData/:num',function(req,res){
通过req.params接收ajax请求地址里面的参数
通过req.body接收ajax请求中data中的参数
})
2. ajax的post请求里面写url 127.0.0.1:3000/getData?name=123
后台接参数 通过在请求路径的字符串中添加:+参数名的形式去写
app.post('/getData',function(req,res){
通过req.query接收ajax请求地址里面的参数
通过req.body接收ajax请求中data中的参数
})
路由中间件的作用
1.项目分工
2.提高可读性
3.对比起没有用路由中间件的写法代码更优雅了
路由中间件的使用
在早期的express中没有路由中间件。
在express早起版本将代码拆分模块的写法
在routes创建一个user.js,用于user模块代码的编写
module.exports = function(app) {
app.get('/getUser',function (req,res) {
res.send("{success:true}");
} );
}
2.在app.js中引入这个模块
var user = require('./routes/user');
3.启用这个模块里面的路由
user(app);
使用路由中间件
1. 在routes创建一个user.js,用于user模块代码的编写
var express = require('express');
var router = express.Router();
router.get('/getUser', function(req, res) {
res.send("{success:true}");
});
module.exports = router;
2. 在app.js中引入这个模块
var user = require('./routes/user');
3. 启用这个模块里面的路由
app.use('/', user);