使用express方法创建一个express应用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| const http = require('http'); const express = require('express');
const app = express();
const server = http.createServer(app);
server.listen(9527, () => { console.log("listen port 9527!") })
server.on('listening', res => { console.log(res) })
|
等价于:
1 2 3 4 5 6 7
| const express = require('express'); const app = express();
app.listen(9527, () => { console.log('listen port 9527') })
|
配置请求响应函数
1 2 3 4 5 6 7 8 9
| app.get('/abc', (req, res) => { console.log('请求头:', req.headers); console.log('请求路径:', req.path); console.log('请求参数:', req.query);
res.send('<h1>ab435c</h1>')
})
|
中间件
当匹配到请求时,会交给第一个处理函数处理,函数中要手动交给后续的中间件处理。
如果已经没有后续中间件,express发现响应没有结束,express会响应404。
如果中间件发生了错误,不会停止服务器(相当于调用了next(错误处理对象)),会寻找后续的错误处理中间件,如果没有会响应500
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| const express = require('express');
const app = express();
app.listen(9527, () => { console.log('server is listening port 9527') })
app.get('/news', (rep, res, next) => { console.log('第一个处理函数!'); next(); }, (rep, resp, next) => { console.log('第二个处理函数!'); next(); } )
app.get('/news', (rep, res, next) => { console.log('第三个处理函数!'); res.send('123') })
|
处理遇到的报错
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| const express = require('express');
const app = express();
app.listen(9527, () => { console.log('server is listening port 9527') })
app.get('/news', (req, res, next) => { console.log('第一个处理函数!'); next(); }, (req, res, next) => { console.log('第二个处理函数抛出错误!'); throw new Error('报错了!'); next(); }, (error, req, res, next) => { console.log('第三个处理函数!'); res.send('123'); next(); } )
|
自带中间件
静态服务器
参数一:静态资源的目录
当请求时,会根据请求路径(req.path),从指定的目录中寻找是否存在该文件,如果存在,直接响应文件内容,而不再移交给后续的中间件;
如果不存在文件,则直接移交给后续的中间件处理;
默认情况下,如果映射的结果是一个目录,则会自动使用index.html文件。
1 2 3 4 5 6 7 8 9 10 11 12
| const express = require('express'); const path = require('path');
const app = express();
app.listen(9527, () => { console.log('server is listening port 9527') })
const root = path.resolve(__dirname, '../public') app.use(express.static(root));
|
解析JSON格式的消息体
解析application/x-www-form-urlencoded形式消息体。
使用之后可以获取请求体中的数据
1 2 3 4 5 6 7 8 9
| app.use(express.urlencoded({ extended: true, }))
app.post('/api/student', (req, res) => { console.log(req.body) res.send('api/student post') })
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| const express = require('express');
const app = express();
app.listen(9527, () => { console.log('server is listening port 9527') })
const router = express.Router();
router.get('/', (req, res) => { res.send('获取学生列表!'); })
router.get('/:id', (req, res) => { res.send('获取单个学生的信息!', id); })
router.put('/:id', (req, res) => { res.send('修改学生的信息!'); })
router.post('/', (req, res) => { res.send('新增一个学生!'); })
router.delete('/:id', (req, res) => { res.send('删除一个学生!') })
app.use('/api/student', router)
|