Вы передаете результат person.sayHello()
в res.send
, однако, поскольку sayHello
является асинхронной функцией, вам нужно then
или await
, чтобы получить результат Обещания. Функции также вызываются в вашем конструкторе Person
без выполнения Promise. Я предполагаю, что это избыточно, так как вы вызываете функцию в своем экспресс-приложении после инициации человека.
app.post('/', async (req, res) => {
const person = new Person('Bob', 'Smith');
try {
res.send(await person.sayHello());
} catch(error) {
res.send(error.message || `${error}`);
}
});
Вы также обнаружите, что ответ от axios не имеет свойства title
, вам нужно получить к нему доступ response.data.title
.
module.exports = class Person {
constructor(first, last) {
this.first = first;
this.last = last;
}
async sayHello() {
const axios = require('axios');
const response = await axios.get(
'https://jsonplaceholder.typicode.com/todos/1'
);
return response.data.title;
}
}
Не уверен, удалили ли вы реализацию вашего запроса get в экспресс-приложении из вопроса или у вас его еще нет. Если это так, то для GET-запроса время ожидания истечет до /.
const express = require('express');
const app = express();
const Person = require('./controllers/person.js');
app.get('/', (req, res) => {
res.send('Hello, World!');
})
app.post('/', async (req, res) => {
const person = new Person('Bob', 'Smith');
res.send(await person.sayHello());
});
app.listen(3000, () => {
console.log('Example app listening on port ' + 3000);
})
В любом случае, используя два предыдущих блока кода, мне удалось добиться того, чтобы в функции sayHello
требовались аксиомы, и вернуть заголовок данных ответа. Однако я не могу воспроизвести описанную вами проблему, за исключением тайм-аута из-за пустого маршрута.