Как решить эту проблему ‘SyntaxError: Недопустимое регулярное выражение: /^ проверка подлинности функции (req, res, next)’?

#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 ...])
  

Сначала по пути должен следовать один или несколько обратных вызовов.