Добавление операции DELETE вызывает TypeError - PullRequest
0 голосов
/ 04 сентября 2018

Я создал остальные API Node.js. Это следует за общим контроллером, моделью, структурой схемы и использует сервер restify, который я запускаю, запустив node index.js.

Контроллер состоит из controllers/baseController.js, который содержит некоторые операции, относящиеся ко всем моим классам контроллеров. Мой controllers/issues.js, который расширяет controllers/baseController.js, изначально имел только операции GET, POST и PUT. Хотя и не полный, они работали нормально. Они определенно не помешали запуску сервера.

Затем я добавил следующее действие удаления в мой контроллер:

controller.addAction({
  'path': '/issues',
  'method': 'DELETE',
  'summary': 'Delete all issues from the list',
  'responseClass': 'Issues',
  'nickname': 'deleteIssues'
}, controller.delete);

Маршруты к:

delete(req, res, next) {
  let collectionContents = this.lib.db.model('Issues');
  collectionContents.remove({}, (err, result) => {
    if(err) return next(this.RESTError('InternalServerError', err));
    this.writeHAL(res, result);
  });
}

Однако, когда я пытаюсь запустить свой сервер, я получаю эту ошибку:

Debugger listening on ws://127.0.0.1:30333/71b18332-4ac6-49b8-b0ac-86517e9a2190
Debugger attached.
/Users/paulcarron/git/issue-tracker/controllers/baseController.js:19
      app[method.toLowerCase()](act['spec']['path'], act['action']);
                               ^

    at Issues.setUpActions (/Users/paulcarron/git/issue-tracker/controllers/baseController.js:15:18)
    at Object.setupRoutes (/Users/paulcarron/git/issue-tracker/lib/helpers.js:13:12)
    at Object.<anonymous> (/Users/paulcarron/git/issue-tracker/index.js:35:13)
    at Module._compile (module.js:632:14)
    at Object.Module._extensions..js (module.js:646:10)
    at Module.load (module.js:554:32)
    at tryModuleLoad (module.js:497:12)
    at Function.Module._load (module.js:489:3)
    at Function.Module.runMain (module.js:676:10)
    at startup (bootstrap_node.js:187:16)
    at bootstrap_node.js:608:3
TypeError: app[method.toLowerCase(...)] is not a function
baseController.js:19
    at actions.forEach.act (/Users/paulcarron/git/issue-tracker/controllers/baseController.js:19:32)
    at Array.forEach (<anonymous>)
    at Issues.setUpActions (/Users/paulcarron/git/issue-tracker/controllers/baseController.js:15:18)
    at Object.setupRoutes (/Users/paulcarron/git/issue-tracker/lib/helpers.js:13:12)
    at Object.<anonymous> (/Users/paulcarron/git/issue-tracker/index.js:35:13)
    at Module._compile (module.js:632:14)
    at Object.Module._extensions..js (module.js:646:10)
    at Module.load (module.js:554:32)
    at tryModuleLoad (module.js:497:12)
    at Function.Module._load (module.js:489:3)
    at Function.Module.runMain (module.js:676:10)
    at startup (bootstrap_node.js:187:16)
    at bootstrap_node.js:608:3
Waiting for the debugger to disconnect...

baseController.js здесь здесь .

Кажется, есть проблема с 'method': 'DELETE'. Однако я не могу понять, почему. Я подумал, что это может быть связано с Swagger, так как я считаю, что такие функции, как addGET, addPOST и т. Д., Существуют и, возможно, addDELETE не существует, но я проверил, и он есть. Кто-нибудь может объяснить, что здесь может быть не так?

Дополнительная информация. Я думаю, что я делаю некоторые успехи. Конкретная точка, в которой я получаю свою проблему, связана с method.toLowerCase(). При настройке DELETE это, по сути, DELETE.toLowerCase(), но это не разрешено, потому что delete - это зарезервированное слово (я думаю). Кажется ли это правильным, и если да, то как мне решить эту проблему?

...