关于like-express.js的匹配到的routes的执行顺序
来源:10-17 -总结
77MICKY
2019-05-08
关于这个like-express.js有点疑问。
它是默认按照routes列表执行的对吧,代码中也就是use(all) 先于 method。
所以如果测试文件里面 保留了app.use(...处理404,并且没有next...)
,原则上会被提前到method之前执行,所以测试的时候,app.get和app.post请求反而被跳过了,并且不会被执行执行。
所以处理未命中的路由是不是还需要增加其他什么规则,而不是直接跳到根目录。
// like-express.js的测试代码
const express = require('./like-express.js');
// 本次http请求实例
const app = express();
app.use((req, res, next) => {
console.log('请求开始 ... ', req.method, req.url);
next();
});
app.use((req, res, next) => {
// 假设在处理cookie
req.cookie = {
userId: 'abcasdf'
};
console.log(req.cookie);
next();
});
app.use((req, res, next) => {
// 假设在处理post data
// 异步
setTimeout(() => {
req.body = {
a: 100,
b: 200
};
console.log(req.body);
next();
});
});
app.use('/api', (req, res, next) => {
console.log('处理 /api 路由');
next();
});
app.get('/api', (req, res, next) => {
console.log('get /api 路由');
next();
});
app.post('/api', (req, res, next) => {
console.log('post /api 路由');
next();
});
// 模拟登录验证
function loginCheck(req, res, next) {
console.log('模拟登录成功~!');
// 模拟异步
setTimeout(() => {
next();
});
};
app.get('/api/get-cookie', loginCheck, (req, res, next) => {
console.log('get /api/get-cookie');
res.json({
errNo: 0,
data: req.cookie
});
});
app.post('/api/get-post-data', (req, res, next) => {
console.log('post /api/get-post-data');
res.json({
errNo: 0,
data: req.body
});
});
app.use((req, res, next) => {
console.log('处理 404');
// res.json({
// errNo: -1,
// data: "404 not found"
// });
next();
});
app.listen(3000, () => {
console.log('server is running on port 3000~!');
});
写回答
2回答
-
双越
2019-05-13
我看了好几遍,这句话是在是没看懂
(另外,非常抱歉周末把这个问题给忘了,耽误了两天时间才来回复。。。)
012019-05-14 -
双越
2019-05-08
把你测试 like-express.js 的代码贴一下吧,这么光文字描述,看着有点懵。
022022-05-05
相似问题