0

使用 node.js,这个错误困扰着我,我猜这是 express 的问题:var app = express(); http.createServer(app)?? 有什么建议吗?

Listening to port 8000
Request / from 127.0.0.1 to localhost:8000

http.js:686
throw new Error('Can\'t render headers after they are sent to the client.'
      ^
Error: Can't render headers after they are sent to the client.

代码在这里:

var sys = require('sys'), 
http = require('http');

var express = require('express'),
    routes = require('./routes');

var app = express();
var _self = this;


var _routes = {
    '/' : function(request, response) {
        response.writeHead(200, {'Content-Type': 'text/html'});
        response.write('hello world\n');
        response.end();
    },

    '/is_up' : function(request, response) {
        response.writeHead(200, {'Content-Type': 'text/plain'});
        response.write('ok');
        response.end();
    },
};

var _requestHandler = function(request, response) {
    console.log('Request '+request.url+' from '+request.connection.remoteAddress+' to '+request.headers.host);
    if(_routes[request.url] === undefined) {
        response.writeHead(404, {'Content-Type': 'text/plain'});
        response.write('not found\n');
        //response.end();
    } else {
        _routes[request.url].call(this, request, response);
    }
};

var _server = module.exports = http.createServer(app).
                    addListener('request', _requestHandler)
                    .listen(8000);
    console.log('Listening to port ' + "8000");
4

1 回答 1

0

我相信问题出在您创建服务器的方式上。看起来您有两个处理程序,一个与另一个冲突。

在您的代码中,您将 Express 应用程序传递给它,而不是您的请求处理程序,然后使用您的请求处理程序添加一个侦听器。

将其更改为以下内容:

var _server = http.createServer(_requestHandler); 
//_server.addListener('request', _requestHandler);
_server.listen(8000);
console.log('Listening to port ' + "8000");
于 2012-08-20T13:11:55.827 回答