Предисловие: Учитывая, что async
и Promise<T>
делает правильное использование типов в JavaScript более важным, это хорошая демонстрация того, почему все больше программистов должны использовать TypeScript.
Краткий ответ: вы возвращаете Promise<T>
(я полагаю, T
- это object
) из temperature()
и затем передаете его в функцию Response.send
ExpressJS, но send
не принимает Promise
объекты.
Функция Response.send
принимает один аргумент типа Buffer | String | Array | object
. Это задокументировано здесь: https://expressjs.com/en/api.html#res.send (хотя технически Promise<T>
- это object
, это не объект в стиле JSON с перечислимыми свойствами, как и send
ожидает) .
Исправление очень простое: сначала измените действие Controller на await
результат temperature()
(т. Е. Для разрешения объекта tempdata
), прежде чем передать его в response.send
.
async index( { response } ) {
let temperatureData = await temperature();
response.send( temperatureData );
}
Несвязанные критики:
* вы не должны хранить локальные значения, используя this.
внутри вашей функции temperature()
, потому что это вносит ошибки, связанные с параллелизмом, в вашу программу. Всегда избегайте мутирования общего состояния.
* вам следует переименовать функцию temperature()
в getTemperature()
или даже в getTemperatureAsPromise()
, чтобы она была сверхчистой, чтобы пользователи знали, как ее использовать, поскольку вы не используете JSDoc или TypeScript.