首页 > 解决方案 > Express 中间件未按正确顺序执行

问题描述

我一个接一个地放置了 2 个中间件,但是第二个总是 console.logs 在第一个之前。

我尝试了 async/await 和 .then 都没有为我工作。我认为这与我的第一个中间件中的 API 调用有关。

app.use('/studies', function (req, res, next) {
    new Airtable({ apiKey: process.env.API_KEY }).base(process.env.BASE)('study').select({
        fields: ['title', 'image', 'keywords', 'affiliation'],
        view: 'default',
    }).firstPage((err, records) => {
        if (err) {
            res.json(err); return
        }

        console.log('first log');
        res.locals.studyObject = records;
    });
    next();
}) 

app.use('/studies', function (req, res) {  
    console.log('second log');          
    res.json(res.locals.studyObject);
})      

我的 console.log 看起来像这样:

[nodemon] restarting due to changes...
[nodemon] starting `node server.js`
listening on port 5000
second log
first log    

标签: node.jsexpress

解决方案


app.use('/studies', (req, res, next) => {
  new Airtable({apiKey: process.env.API_KEY}).base(process.env.BASE)('study').select({          
        fields: ['title', 'image', 'keywords', 'affiliation'], 
        view: 'default', 
        }).firstPage(function (err, records) {
            if (err) return res.json(err);
            return res.json(res.locals.studyObject);
        }
});

推荐阅读