在我们的Node / MongoDB后端中,我们使用Express。我们有一个中央控制器来处理各种控制器功能,其中包括我们用来发送响应(使用Express)的控制器:
sendResponse(responseObject = {}, meta, options = {}, token) {
if (this.responseSent && !this.isSocketRequest) return;
this.responseSent = true;
let response = {};
response.count = this.documentCount;
if (typeof this.parameters.sessionId !== "undefined") response.sessionId = this.parameters.sessionId;
if (typeof meta === "object") response = Object.assign(response, meta);
if (token) response.token = token;
response.data = Object.assign(responseObject, options);
if (this.isSocketRequest) {
this.response(response);
} else {
if (this.documentCount < 1) this.response.sendStatus(204);
else {
console.log("response: ", response);
response.json(response);
}
}
}
在大多数情况下,它的工作完全符合预期。
但是,在一种情况下,当我发送有关写入到GridFS的文件的响应时,出现此错误:
原因:TypeError:response.json不是函数
正如我提到的,这里是Express。我不清楚为什么会出现此错误。通常的罪魁祸首是错别字,是在对象而不是数组上调用map()
,等等。在这里似乎都不是这种情况-因此,我试图了解发生了什么问题。
需要明确的是,我传递给response.json()的不是undefined
。我正在console.log上一行中注销(如您从上面的代码中看到的)。这是response
记录到控制台的内容:
response: { count: 1,
data:
[ { _id: 4vtb4b68f3sw43e3a614b1h4,
filename: '4spd80c3638c2b67b0bc0f6w',
contentType: 'binary/octet-stream',
length: 140062,
chunkSize: 261120,
uploadDate: 2019-05-02T19:56:25.130Z,
aliases: undefined,
metadata: [Object],
md5: 'd13d3d14cb2205v56cdea95cc5f7e214' } ] }
在跟踪问题所在时的任何帮助将不胜感激。