1.目录
- express 下载、安装和使用,express 中间件机制 - 开发接口,连接数据库,实现记录,日志记录 - 分析 express 中间件原理2.安装
- 安装(使用脚手架 express-generator)
- 初始化代码介绍,处理路由
- 使用中间件
npm install express-generator -g
安装nodemon和cross-env
npm i nodemon cross-env -S
package.json
"scripts": {
"start": "node ./bin/www",
"dev": "cross-env NODE_ENV=dev nodemon ./bin/www"
}
3.express的入口代码 (app.js)
- 各个插件的作用
- post和get请求
cookie-parser:
var cookieParser = require('cookie-parser');
...
app.use(cookieParser());
用于解析cookie。
http-errors:
var createError = require('http-errors');
...
app.use(function(req, res, next) {
next(createError(404));
});
用于处理404。
morgan:
var logger = require('morgan');
...
app.use(logger('dev'));
用于记录日志。
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
用于处理post请求数据,json获取的是req.headers[‘content-type’] = 'application/json’的格式,另一个处理的是其他格式,在路由中都可以通过req.body获取数据。
router:
app.use('/', indexRouter);
routes/index.js
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
module.exports = router;
在路由文件中通过var router = express.Router();生成路由示例然后创建路由,在app.js中通过中间件形式注册。
错误抛出:
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'dev' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
4.初始化路由
routes/blog.js
var express = require('express');
var router = express.Router();
router.get('/list', function(req, res, next) {
res.json({
errno: 0,
data: [1,2,3]
})
});
router.get('/detail', function(req, res, next) {
res.json({
errno: 0,
data: 'ok'
})
});
module.exports = router;
app.js
const blogRouter = require('./routes/blog');
...
app.use('/api/blog', blogRouter);
routes/user.js
var express = require('express');
var router = express.Router();
router.post('/login', function(req, res, next) {
const { username, password} = req.body
res.json({
errno: 0,
data: {
username,
password
}
})
});
module.exports = router;
app.js
const userRouter = require('./routes/user');
...
app.use('/api/user',userRouter);
由于有express.json和app.use(express.urlencoded({ extended: false })),可以处理post请求的这两种格式数据。
- 在app.js中引用路由文件,在使用的时候可以注册父路由。如:app.use(’/api/blog’, blogRouter);。
- 可以通过res.json({})返回json格式数据。