Express 4 - REST-Client通过异步处理程序获取404路由

时间:2015-10-16 19:58:47

标签: javascript node.js asynchronous express

编辑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)上测试了它,它工作得很好。我很无能为力。我搜索了全球安装的其他版本的快递,但似乎什么都没有。我尝试了其他端口,但没有用。

0 个答案:

没有答案