#node.js #express
#node.js #выразить
Вопрос:
Я работаю над серверной частью (Express, Node, Mongo). Я настроил https с помощью OpenSSL и по мере необходимости внес изменения в bin / www и в app.js . Я получаю очень незнакомую ошибку и очень длинную ошибку. Я включаю это здесь.
E:CourseraMERNNodeJSconFusionServernode_modulespath-to-regexpindex.js:128
return new RegExp(path, flags);
^
SyntaxError: Invalid regular expression: /^function authenticate(req, res, next) {
if (http.IncomingMessage.prototype.logIn
amp;amp; http.IncomingMessage.prototype.logIn !== IncomingMessageExt.logIn) {
require('../framework/connect').__monkeypatchNode();
}
// accumulator for failures from each strategy in the chain
var failures = [];
function allFailed() {
if (callback) {
if (!multi) {
return callback(null, false, failures[0].challenge, failures[0].status);
} else {
var challenges = failures.map(function(f) { return f.challenge; });
var statuses = failures.map(function(f) { return f.status; });
return callback(null, false, challenges, statuses);
}
}
..................................................................
..................................................................
..................................................................
at new RegExp (<anonymous>)
at pathtoRegexp (E:CourseraMERNNodeJSconFusionServernode_modulespath-to-regexpindex.js:128:10)
at new Layer (E:CourseraMERNNodeJSconFusionServernode_modulesexpresslibrouterlayer.js:45:17)
at Function.route (E:CourseraMERNNodeJSconFusionServernode_modulesexpresslibrouterindex.js:494:15)
at Function.proto.<computed> [as get] (E:CourseraMERNNodeJSconFusionServernode_modulesexpresslibrouterindex.js:509:22)
**at Object.<anonymous> (E:CourseraMERNNodeJSconFusionServerroutesusers.js:12:8)**
at Module._compile (internal/modules/cjs/loader.js:1138:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
at Module.load (internal/modules/cjs/loader.js:986:32)
at Function.Module._load (internal/modules/cjs/loader.js:879:14)
at Module.require (internal/modules/cjs/loader.js:1026:19)
at require (internal/modules/cjs/helpers.js:72:18)
**at Object.<anonymous> (E:CourseraMERNNodeJSconFusionServerapp.js:13:19)**
at Module._compile (internal/modules/cjs/loader.js:1138:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
at Module.load (internal/modules/cjs/loader.js:986:32)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! confusionserver@0.0.0 start: `node ./bin/www`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the confusionserver@0.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:UsersLenovoAppDataRoamingnpm-cache_logs2020-09-07T04_31_33_225Z-debug.log
users.js строка 12:
router.get( authenticate.verifyUser, authenticate.verifyAdmin, '/', function(req, res, next) {
User.find({})
.then((users) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'application/json');
res.json(users);
}, (err) => next(err))
.catch((err) => next(err));
});
app.js строка 13:
var usersRouter = require('./routes/users');
Итак, чего я не понимаю? Почему я получаю эту ошибку? До изменения кода для OpenSSL все работало нормально, и теперь это.
Моя версия узла: v12.18.1, экспресс: 4.16.1, npm: 6.14.8
Ответ №1:
Аргумент path для router.get()
должен быть первым.
Измените это:
router.get( authenticate.verifyUser, authenticate.verifyAdmin, '/', ...)
к этому:
router.get('/', authenticate.verifyUser, authenticate.verifyAdmin, ...)
Ошибка пытается показать, что вы передаете authenticate.verifyUser
где Express ожидает либо строку, либо регулярное выражение, но вы передаете функцию.
К вашему сведению, это интересный пример того, где TypeScript может быть полезен. Это могла быть ошибка компиляции из-за неправильного типа аргумента для первого аргумента, а не загадочная ошибка времени выполнения.
Из экспресс-документа подпись для app.get()
такова:
app.get(path, callback [, callback ...])
Сначала по пути должен следовать один или несколько обратных вызовов.