编辑2 - 已修复
我刚刚在我的项目文件夹中重新安装了express,它工作正常。几秒钟后它停止工作。
我正在使用Webstorm并且有一个用于ES6文件的babel文件观察器。该文件观察者在安装节点模块时会启动,并且似乎以某种方式弄乱了模块代码。
我为文件观察者设置了一个特定的范围。我使用* .es6作为我的ES6-Code文件。现在一切都很好。
原始问题
所以我有最简单的表达方式:
var express = require('express');
var app = express();
var router = express.Router();
router.route("/test").get(function (req, res) {
console.log(res.headersSent);
setTimeout(() => {
console.log(res.headersSent);
try {
res.send("done waiting");
} catch(e) {
console.log(e.stack);
}
}, 1000);
});
app.use("/", router);
var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port;
console.log('App listening at http://%s:%s', host, port);
});
我运行服务器并向localhost:3000 / test
发出GET请求我立刻得到了404。控制台说
App listening at http://:::3000 false true Error: Can't set headers after they are sent. at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:350:11)
因此false
表示在调用我的处理程序之前未发送标题。
true
在1000毫秒后出现。它表示在调用异步函数之前发送了标头。
我希望我的REST客户端(在这种情况下是Postman)可以持续1000毫秒的请求,得到响应并显示“完成等待”
我的理解是,因为我的处理程序没有立即做出回应,所以发送了该路线的404。
我确定我错过了一些非常愚蠢的东西,但我来回搜索互联网半天,阅读教程并找不到解决方案。
我偶尔使用express(v2和v3)并在请求处理程序中执行异步操作。从未遇到过这个问题。
那么,我在这里错过了什么?
nodejs是4.2.1 Express是4.13.3
编辑1
我在Windows 7,64位,节点也是64位。
我在另一台计算机(OS X)上测试了它,它工作得很好。我很无能为力。我搜索了全球安装的其他版本的快递,但似乎什么都没有。我尝试了其他端口,但没有用。