2017-09-12 8 views
-1

utiliser le module formidable exprimerexpress-Formidable "Impossible de définir les en-têtes après leur envoi."

lorsque je charge une page 2 fois que j'ai que sur la console

GET /users 304 6.948 ms - - 
GET /users 304 213.344 ms - - 
Error: Can't set headers after they are sent. 
at validateHeader (_http_outgoing.js:489:11) 
at ServerResponse.setHeader (_http_outgoing.js:496:3) 
at ServerResponse.header (/home/neolinux/Encoding-Service/encode-service/node_modules/express/lib/response.js:730:10) 
at ServerResponse.contentType (/home/neolinux/Encoding-Service/encode-service/node_modules/express/lib/response.js:558:15) 
at ServerResponse.send (/home/neolinux/Encoding-Service/encode-service/node_modules/express/lib/response.js:145:14) 
at done (/home/neolinux/Encoding-Service/encode-service/node_modules/express/lib/response.js:967:10) 
at Object.exports.renderFile (/home/neolinux/Encoding-Service/encode-service/node_modules/pug/lib/index.js:422:12) 
at View.exports.__express [as engine] (/home/neolinux/Encoding-Service/encode-service/node_modules/pug/lib/index.js:465:11) 
at View.render (/home/neolinux/Encoding-Service/encode-service/node_modules/express/lib/view.js:127:8) 
at tryRender (/home/neolinux/Encoding-Service/encode-service/node_modules/express/lib/application.js:640:10) 

ceci est mon app.js

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 


var index = require('./routes/index'); 
var users = require('./routes/users'); 

const util=require("util"); 
var app = express(); 

const formidable = require('express-formidable'); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'pug'); 

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 

app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use(formidable({ 
    uploadDir: path.join(__dirname, '/Upload'), 
})); 

app.use('/', index); 
app.use('/users', users); 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handler 
app.use(function(err, req, res, next) { 
    // set locals, only providing error in development 
    res.locals.message = err.message; 
    res.locals.error = req.app.get('env') === 'development' ? err : {}; 

    // render the error page 
    res.status(err.status || 500); 
    res.render('error'); 
}); 

module.exports = app; 

, vous devez maintenant, si je enlever formidable je n'ai pas l'erreur. Une idée ?

express v 4.5 noeud v8

ne lisent pas le texte suivant, cela est juste pour supprimer l'erreur stackoverflow !!! Je ne sais pas comment ajouter plus d'informations pour ce problème. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod temporel incididunt ut labore et dolore magna aliqua

Ut enim ad minim veniam, quis nostrud exercice ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate vlit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt dans culpa Qui officia deserunt mollit anim id est Laborum

Sed ut perspiciatis unde omnis iste natus erreur s'asseoir voluptatem accusantium doloremque laudantium, totam rem aperiam, Eaque IPSA quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas s'asseoir aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum Qui dolorem eum fugiat quo voluptas nulla pariatur

Répondre

0

Il y a une solution, exprimez-formidable ont Probleme dans la version middleware,

il sont deux de chaque gestionnaire d'événements, ce qui signifie que chaque événement est traité deux fois, ce qui conduit à deux appels next() et, par conséquent, une exception concernant les en-têtes définis trop tard.

la solution est app.js:

const formidable = require('formidable'); 
app.use(function (req, res, next) { 
    var form = new formidable.IncomingForm({ 
     encoding: 'utf-8', 
     uploadDir: path.join(__dirname, '/Upload'), 
     multiples: true, 
     keepExtensions: true 
    }) 
    form.once('error', console.log) 
    form.parse(req, function (err, fields, files) { 
     Object.assign(req, {fields, files}); 
     next(); 
    }) 
}) 
app.use('/', index);