【发布时间】:2018-11-09 15:15:31
【问题描述】:
假设我有以下样板快递应用程序:
const express = require('express');
const app = express();
const Person = require('./controllers/person.js');
app.get('/', (req, res) => {
})
app.post('/', (req, res) => {
var person = new Person('Bob', 'Smith');
res.send(person.sayHello());
});
app.listen(port, () => {
console.log('Example app listening on port ' + 3000);
})
我的 person.js 文件如下所示:
module.exports = class Person {
constructor(first, last) {
this.first = first;
this.last = last;
this.sayHello();
}
sayHello() {
return ('Hi, my name is ' + this.first + ' ' + this.last)
}
}
现在一切正常,但是当我想导入将在 person 类上工作的模块时,事情就中断了。
例如,如果我将Person.sayHello() 更改为:
async sayHello() {
var axios = require('axios')
var response = await axios.get('https://jsonplaceholder.typicode.com/todos/1')
return response.title
}
整个项目拒绝服务请求。我已经解决了问题是我需要新模块的那一行,但我想不出另一种方法来只为该类需要该模块?
此外,这里的异步不是问题,如果我将 sayHello() 函数更改为:
sayHello() {
var axios = require('axios')
return 'This line is never returned';
}
服务器仍然出错,GET 请求给了我一个ERR_CONNECTION_REFUSED
【问题讨论】:
-
嗯,我的 asyncs 有点缺少 atm,但也许:
var person = new Person('Bob', 'Smith'); var title = await person.sayHello(); res.send(title);你会立即发送 sayHello 的响应,而无需等待 axios 请求解决。 -
您将
person.sayHello()的结果传递给res.send,但是,因为sayHello是一个异步函数,您需要then或await才能得到结果。 -
“拒绝服务请求”是什么意思?你有错误吗?超时?究竟是什么?
-
尝试在 express 应用程序之外加载 person 类,例如制作一个简单的测试文件,加载 person 类并打招呼(只需使用 node 运行它),你会得到什么?
-
@NikosM。一个 POST 到 / 返回 503。
标签: javascript node.js express ecmascript-6