中间件的捕获错误
在node.js中,异步API的错误信息都是通过回调函数获取的,支持Promise对象的异步API发生错误可以通过catch方法捕获。
try catch可以捕获异步函数以及其他同步代码在执行过程中发生的错误,但是不能捕获其他类型的API发生的错误。
try处理代码,如果失败跳转到catch中,next开始中间件,可以捕获同步代码和异步函数的错误,不能捕获回调函数的错误,promise对象的错误等等。
try {
await readFile('./aaa.js');
} catch (ex) {
next(ex)
}
程序不会因为找不到一个文件就终止运行,这增加代码的健壮性。
构建模块化路由
const express = require('express');
//创建网站服务器
const app = express();
//创建路由对象
const home = express.Router();
//为路由对象匹配请求路径
app.use('/home', home);
//创建二级路由 来响应内容
home.get('/index', (req, res) => {
res.send('欢迎来到页面');
})
//端口监听
app.listen(3000);
构建模块化路由
GET参数的获取
Express框架中使用req.query即可获取GET参数,框架内部会将GET参数转换为对象并返回。
const express = require('express');
//创建网站服务器
const app = express();
app.get('/index', (req, res) => {
//获取get请求参数
res.send(req.query)
})
//端口监听
app.listen(3000);
POST参数的获取
Express中接收post请求参数需要借助第三方包 body-parser。
下载第三方模块
const express = require('express');
const bodyParser = require('body-parser');
//创建网站服务器
const app = express();
//拦截所有请求
//extended: false 方法内部使用queryString模块处理请求参数格式
//extended: true 方法内部使用第三方模块qs处理请求参数的格式
app.use(bodyParser.urlencoded({extended: false}))
//req.body的值就是post请求参数,是bodyParser添加的
app.post('/add', (req, res) => {
res.send(req.body)
})
//端口监听
app.listen(3000);
<form action="http://localhost:3000/add" method="post">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit">
</form>
Express路由参数(传递和接收GET请求参数的另外一种方式)
const express = require('express');
const bodyParser = require('body-parser');
//创建网站服务器
const app = express();
//req.body的值就是post请求参数,是bodyParser添加的
app.get('/index/:id/:name/:age', (req, res) => {
res.send(req.params)
})
//端口监听
app.listen(3000);
静态资源的处理
通过Express内置的express.static可以方便地托管静态文件,例如img、CSS、JavaScript文件等。
//实现静态资源访问功能
app.use(express.static(path.join(__dirname, 'route')));