错误:在Node.js,Express之后写入

我得到以下错误

标题

Caught exception: Error: write after end at ServerResponse.OutgoingMessage.write (_http_outgoing.js:413:15) at ServerResponse.res.write (/home/projectfolder/node_modules/express/node_modules/connect/lib/middleware/compress.js:110:17) at ServerResponse.res.end (/home/projectfolder/node_modules/express/node_modules/connect/lib/middleware/compress.js:116:14) at ServerResponse.res.send (/home/projectfolder/node_modules/express/lib/response.js:154:8) at fn (/home/projectfolder/node_modules/express/lib/response.js:794:10) at View.exports.renderFile [as engine] (/home/projectfolder/node_modules/jade/lib/jade.js:222:12) at View.render (/home/projectfolder/node_modules/express/lib/view.js:76:8) at Function.app.render (/home/projectfolder/node_modules/express/lib/application.js:504:10) at ServerResponse.res.render (/home/projectfolder/node_modules/express/lib/response.js:798:7) at /home/projectfolder/app/controllers/index.js:578:9 

是任何人都知道这个错误的原因。 我知道,我们不能写入响应发送后的stream,但我无法find从这里写操作执行,我得到这个错误。 我的app / controllers / index.js文件代码如下。 请帮忙。

index.js

 var request= require("request"); var crypto = require('crypto'); var env = process.env.NODE_ENV || 'development' , config = require('../../config/config')[env] var async=require("async"); exports.index = function(req, res){ //some code var data=[]; async.parallel([ function(fncallback) { // code here data[0]="some data1"; }, function(fncallback) { //code here data[1]="some data2"; }, function(fncallback) { // code here data[2]="some data3"; }, function(fncallback) { //code here data[3]="some data4"; }, ],function(err,responsedata){ /*some code*/ res.render('index', { container1:data[0], container2:data[1], container3:data[2], container4:data[3] }); }); }; 

server.js

 var http = require('http'); var fs = require('fs') , passport = require('passport') , utils = require('./utils'); var fs = require('fs') var events = require('events') var util = require('util') var path = require('path') var FsPool = module.exports = function(dir) { events.EventEmitter.call(this) this.dir = dir; this.files = []; this.active = []; this.threads = 1; this.on('run', this.runQuta.bind(this)) }; // So will act like an event emitter util.inherits(FsPool, events.EventEmitter); FsPool.prototype.runQuta = function() { if(this.files.length === 0 && this.active.length === 0) { return this.emit('done'); } if(this.active.length < this.threads) { var name = this.files.shift() this.active.push(name) var fileName = path.join(this.dir, name); var self = this; fs.stat(fileName, function(err, stats) { if(err) throw err; if(stats.isFile()) { fs.readFile(fileName, function(err, data) { if(err) throw err; self.active.splice(self.active.indexOf(name), 1) self.emit('file', name, data); self.emit('run'); }); } else { self.active.splice(self.active.indexOf(name), 1) self.emit('dir', name); self.emit('run'); } }); } return this }; FsPool.prototype.init = function() { var dir = this.dir; var self = this; fs.readdir(dir, function(err, files) { if(err) throw err; self.files = files self.emit('run'); }) return this }; var fsPool = new FsPool(__dirname + '/public/') fsPool.on('file', function(fileName, fileData) { //console.log('file name: ' + fileName) //console.log('file data: ', fileData.toString('utf8')) }) fsPool.on('dir', function(dirName) { //console.log('dir name: ' + dirName) }) fsPool.on('done', function() { //console.log('done') }); fsPool.init() var env = process.env.NODE_ENV || 'development' , config = require('./config/config')[env] , mongoose = require('mongoose'); /*******************************cluster code starts**************/ var cluster = require('cluster'); //cluster.schedulingPolicy = cluster.SCHEDRR; var numCPUs = require('os').cpus().length; //var numCPUs = 10; console.log("no of cpus"+numCPUs); if (cluster.isMaster) { // Fork workers. for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', function(worker, code, signal) { console.log('worker ' + worker.process.pid + ' died'); }); } else { require('./config/passport').localPassport(passport, config) var app = express(); http.globalAgent.maxSockets = 5; app.use(passport.initialize()); app.use(passport.session()); require('./config/express')(app, config, passport); require('./config/routes')(app, passport); exports = module.exports = app } /***********************************************************/ 

express.js

 var express = require('express') , flash = require('connect-flash'); var MongoStore = require('connect-mongo')(express); var env = process.env.NODE_ENV || 'development' , config = require('./config')[env]; module.exports = function (app, config, passport) { app.set('showStackError', true) // should be placed before express.static app.use(express.compress({ filter: function (req, res) { return /json|text|javascript|css/.test(res.getHeader('Content-Type')) }, level: 9 })) app.use(express.favicon()); app.enable('view cache'); var oneYear = 31557600000; app.use(express.static(config.root + '/public',{ maxAge: oneYear })) //console.log(config.root); // don't use logger for test env if (process.env.NODE_ENV !== 'test') { app.use(express.logger('dev')) } // set views path, template engine and default layout app.set('views', config.root + '/app/views') app.set('view engine', 'jade') app.configure(function () { app.use(express.cookieParser()) app.use(express.session({ secret: '***********', // 2 * 60 * 60 * 1000 cookie: { expires: new Date(Date.now() + 7200000) }, saveUninitialized: false, // don't create session until something stored resave: false, //don't save session if unmodified store: new MongoStore({ host: 'hostname', // Default, optional port: portno, // Default, optional db: 'db_name', // Required auto_reconnect:true, w: 1, // Default, ssl: false, // Default ttl: 15 * 24 * 60 * 60, // = 15 days. Default touchAfter: 24 * 3600, // time period in seconds autoRemove: 'interval', autoRemoveInterval: 10, // In minutes. Default }, function(e) { // Start the app by listening on <port> var port = process.env.PORT || config.guiPort; var server = app.listen(port, '192.168.1.104'); console.log('Express app started on port '+port); }) })); app.use(express.json()); app.use(express.urlencoded()); app.use(express.methodOverride()) //app.use(flash()); app.use(passport.initialize()); app.use(passport.session()); //passport.authenticate('remember-me'); app.use(passport.authenticate('remember-me')); app.use(flash()); // routes should be at the last app.use(function(req,res,next){ res.locals.session = req.session; next(); }); app.use(app.router) }) // development env config // to display nice formatted html app.configure('development', function () { app.locals.pretty = true }); } 

我无法find这个错误的原因,请帮助我。提前感谢。

你在这个对象声明中有一个错字:

 res.render('index', { container1:data[0]; container2:data[1]; container3:data[2]; container4:data[3]; }); 

应该:

 res.render('index', { container1:data[0], container2:data[1], container3:data[2], container4:data[3] });