В нашем бэкэнде 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.logging его в предыдущей строке (как вы можете видеть из кода выше).Это то, что регистрирует на консоли для 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' } ] }
Любая помощь будет полезна в отслеживании, что проблема здесь.