Экспресс промежуточное программное обеспечение не выполняется в правильном порядке - PullRequest
2 голосов
/ 28 апреля 2019

Я поставил 2 промежуточных ПО одно за другим, однако 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    

Ответы [ 2 ]

0 голосов
/ 28 апреля 2019
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);
        }
});
0 голосов
/ 28 апреля 2019

Это потому, что в первой середине вы вызываете асинхронную функцию и входите в систему функции обратного вызова. Если вы хотите передать обработчик следующему промежуточному программному обеспечению после выполнения обратного вызова, переместите next() в обратный вызов.

Попробуйте это,

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();
    });
}) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...