node.js - 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
解决方案
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);
}
});
推荐阅读
- c# - Bulkcopy 100 million rows of data to Azure SQL Server using C#?
- mongodb - $lookup 与 mongodb 中的嵌套数据
- java - spring freemarker在handlerinterceptor中添加属性
- time-complexity - 将分区概率降低为决策概率
- javascript - 使用箭头函数反应 this.setState 导致控制台出错
- c# - UnitTest 预计 ModelState 无效,但事实并非如此
- ios - CLLocation2D 没有从变量中获得赋值
- c# - 如何找出正在运行的 Discord 机器人实例的数量?
- spring-boot - spring boot + cassandra 轻量级事务更新
- kotlin - println() 产生不同的输出