Nb. Это сводит меня с ума, и я несколько раз ходил по домам. Однако я довольно новичок в ES6 и JS в целом и полностью понимаю, что класс JS не похож на классы, найденные в других языках, и, возможно, подходит к этому совершенно неправильно.
Я запускаю следующий код, который использует Express.js (v4.16.3) и body-parser (v1.18.2) на Node v8.9.0.
app.post('/api/v1/user/update', urlencodedParser, user.update);
Код вызывает 'urlencodedParser', который действует как промежуточное программное обеспечение, чтобы обеспечить 'req' 'req.body', чтобы я мог вытащить поля формы. 'user' - это модуль класса, который был экспортирован и содержит все функции для проверки, обновления и т. д. и выглядит примерно так:
class Users {
update(req,res) {
console.log('updating...');
this.verifyUserIdentity();
}
verifyUserIdentity(req,res) {
console.log('verify');
}
}
module.exports = new Users;
Теперь, если бы мне нужно было запустить этот код в узле без Express, вот так:
var users = require('./modules/users');
users.update();
Все это похоже на выполнение, и я получаю следующий вывод в CLI:
updating...
verify
Если я заверну все это в app.post () (выше) и использую Postman для отправки POST, он выполнит первый метод и остановится после console.log () без ошибок. Кажется, не вызывать verifyUserIdentity () , и я получаю следующее о CLI:
updating...
Если я изменю код, как вы видите ниже, и передам массив методов в обработчик промежуточного программного обеспечения Express, он, похоже, будет работать, но теперь я должен вызывать verifyUserIdentity () отдельно, и не решить проблему вызова другого метода из того же класса, например, метода log () .
class Users {
update(req,res) {
console.log('updating...');
}
verifyUserIdentity(req,res,next) {
console.log('verify');
next();
}
}
module.exports = Users;
app.post('/api/v1/user/update', [urlencodedParser, users.verifyUserIdentity], users.update);
Некоторые мои вопросы:
- Почему оригинальный шаблон не работает с Express?
- это "взяло" из-за обработчиков обратного вызова?
- Это как-то связано с Node v8.9.0?
- Я все делаю неправильно?