获取使用非常简单的脚本使用节点发送后无法设置标题

我在Node中编写了一个非常复杂且工作的js脚本。 我升级了我的服务器,发现它失败了。 回到基础,我发现这个简单的脚本失败了一个控制台消息,如下图所示,当我从我的浏览器去http://www.mapworldlive.com:8899/test :

var http = require("http"); var express = require('express') var app = express() var server = http.createServer(app); server.on('request', app); server.listen(8899); var chttime=new Date(),showdate=chttime.toDateString(),secs=chttime.getSeconds(),mins=chttime.getMinutes(),hrs=chttime.getHours(),day=chttime.getDay(),month=chttime.getMonth(),year=chttime.getFullYear(); console.log("Test Server started: "+hrs+":"+mins+" "+showdate); app.use('/test',function(req, res) { console.log("hello world") res.end() }) 

响应:

 Test Server started: 14:23 Sat Feb 04 2017 hello world Error: Can't set headers after they are sent. 

请帮助我,以便在我的情况下帮助别人!

堆栈跟踪:

 Error: Can't set headers after they are sent. at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:356:11) at expressInit (/var/www/vhosts/mapworldlive.com/dev.mapworldlive.com/node_modules/express/lib/ iddleware/init.js:23:42) at Layer.handle [as handle_request] (/var/www/vhosts/mapworldlive.com/dev.mapworldlive.com/node modules/express/lib/router/layer.js:95:5) at trim_prefix (/var/www/vhosts/mapworldlive.com/dev.mapworldlive.com/node_modules/express/lib/ outer/index.js:312:13) at /var/www/vhosts/mapworldlive.com/dev.mapworldlive.com/node_modules/express/lib/router/index. s:280:7 at Function.process_params (/var/www/vhosts/mapworldlive.com/dev.mapworldlive.com/node_modules/ xpress/lib/router/index.js:330:12) at next (/var/www/vhosts/mapworldlive.com/dev.mapworldlive.com/node_modules/express/lib/router/ ndex.js:271:10) at query (/var/www/vhosts/mapworldlive.com/dev.mapworldlive.com/node_modules/express/lib/middle are/query.js:44:5) at Layer.handle [as handle_request] (/var/www/vhosts/mapworldlive.com/dev.mapworldlive.com/node modules/express/lib/router/layer.js:95:5) at trim_prefix (/var/www/vhosts/mapworldlive.com/dev.mapworldlive.com/node_modules/express/lib/ outer/index.js:312:13) 

这两条线基本上是一样的:

 var server = http.createServer(app); server.on('request', app); 

所以我的猜测是你正在运行你的请求处理两次,第二个发现第一个已经调用response.end

删除server.on试。 另外一个个人暗示:不要调用res.end而是输出一些东西给浏览器,这样你就可以很容易地testing,比如res.send('Hi!')