javascript - 添加DELETE操作导致TypeError
问题描述
我创建了一个 Node.js 休息 api。它遵循通用控制器、模型、模式结构,并使用我开始运行的 restify 服务器node index.js
。
控制器由一个controllers/baseController.js
包含一些与我的所有控制器类相关的操作组成。我的controllers/issues.js
which extendscontrollers/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 是保留字(我认为)。这看起来是否正确,如果是,我该如何解决?
解决方案
推荐阅读
- java - 按值查找选项错误:无效选择器:指定了无效或非法的选择器
- javascript - 节点 js csv-writer
- asp.net-core - 应用程序/json 410 - 200 - 应用程序/json;+charset=utf-8 5732.4554ms ASP.NET CORE API
- javascript - 如何避免我的动画图像剪裁粘性标题?
- javascript - docs.forEach 不是函数
- java - com.crystaldecisions.sdk.occa.report.template 找不到
- javascript - 使用.then nodejs
- java - 如何在java中的反射中获取枚举对象
- mysql - 获取包含某个值的最新行以及在某个时间跨度内共享该值的所有行
- javascript - 什么是 gapi.client.init() 以及它与使用 HTTP 请求有何不同?