请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于like-express.js的匹配到的routes的执行顺序

关于这个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~!');
});

正在回答 回答被采纳积分+3

2回答

双越 2019-05-13 20:51:33

我看了好几遍,这句话是在是没看懂

https://img1.sycdn.imooc.com//szimg/5cd9684200018a0215280386.jpg

(另外,非常抱歉周末把这个问题给忘了,耽误了两天时间才来回复。。。)

0 回复 有任何疑惑可以回复我~
  • 提问者 77MICKY #1
    哈哈  我也快忘记了,就是这个like-express里面,中间件执行顺序不是按照注册顺序来的,所以用我的代码做test的时候,会有代码被跳过的情况,不是所有的中间件都被执行了。也就是 你在注册use类型的时候,如果use是最后一种(没有任何路由的情况),您的test文件只执行了use类型的中间件,get和post类型的都没有被执行。
    回复 有任何疑惑可以回复我~ 2019-05-14 15:01:00
双越 2019-05-08 20:44:45

把你测试 like-express.js 的代码贴一下吧,这么光文字描述,看着有点懵。

0 回复 有任何疑惑可以回复我~
  • 提问者 77MICKY #1
    代码已贴上,谢谢哈
    回复 有任何疑惑可以回复我~ 2019-05-10 10:26:26
  • 遇到同样的问题,这段原理缺少了app.use和app.get/post之间执行顺序的处理
    回复 有任何疑惑可以回复我~ 2022-05-05 18:08:49
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号