Я использую экспресс-фреймворк для внутреннего сервера node.js. Я использую экспресс-маршрутизатор для определения различных маршрутов.
Это мой app.js файл:
var express = require('express');
var app = express();
var server = require('http').Server(app);
var cors = require('cors');
app.use(cors());
app.use(express.json());
var route = require('./route');
app.use('/api/', route);
server.listen(3000, () => {
console.info('App running on port 3000!');
});
Это мой роутер route.js:
var express = require('express');
var router = express.Router();
var controller = require('./controller');
router.use(function (req, res, next) {
next();
router.get('/test', function (req, res, next) {
controller.get(req, res, next);
});
});
module.exports = router;
Сам маршрут использует контроллер для логики controller.js
exports.get = function (req, res, next) {
res.send('Hello World');
}
Запуск приложения с помощью node app.js и вызов определенного маршрута http://localhost:3000/api/test приведет к Cannot GET /api/testс первой попытки. Однако вызов маршрута второй раз приведет к ожидаемому ответу hello world.
В чем причина неудачи первого звонка? Почему это работает со второй попытки? Любые идеи приветствуются



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Потому что router.use(function (req, res, next) { будет выполняться только по первому запросу, а когда вы вызываете next() маршрут еще не добавлен. После этого вы звоните router.get(...), который добавит маршрут, чтобы он был доступен в следующий раз.
Тем не менее, это просто плохо, переместите .get(...) за пределы .use(...) (вы также можете полностью избавиться от него).
"переместите .get(...) за пределы .use(...)"
Просто чтобы было понятно, ты сделал это неправильно - вот что имеет в виду Йонас.
Спасибо, это имеет смысл и сработало. Однако как бы я реализовал проверку. Приведенный выше код представляет собой урезанную версию фактического кода, и в моем коде
next()вызывается только в том случае, если сохраненный сеанс, соответствующий запросу, верен.