不一致,但有时我收到Can't set headers after they are sent
错误。通常当我试图同时从数据库加载许多图像时。
Express甚至在调用路由器获取功能之前发送了404。这是路由器功能:
router.get('/:imageId', formparser, function (req, res) {
imageStorage.fetch(req.params.imageId).then(function (img) {
console.log(res._headerSent);
if (img) {
res.contentType(img.contentType);
res.send(img.data);
} else
res.status(404).send();
});
});
module.exports = router;
知道可能是什么原因?
更多信息:我认为我未能实现的布线可能会有些棘手。我正在使用5种不同的Router
,并将它们添加到express
应用中,如下所示:
app.use('/images', require('./routes/imageroutes'));
app.use('/course', require('./routes/courseroutes'));
app.use('/user', require('./routes/userroutes'));
app.use('/class', require('./routes/classroutes'));
app.use('/responses', require('./routes/responsesroutes'));
指针将不胜感激。
formparser.js
中间件:
'use strict';
const formidable = require('formidable');
function parse(opts) {
const form = new formidable.IncomingForm();
form.multiples = true;
Object.assign(form, opts);
return (req, res, next) => {
var fields = {};
var files = {};
form.parse(req, function (err, _fields, files) { fields = _fields; });
form.onPart = function (part) {
if (!part.filename) {
// let formidable handle all non-file parts
form.handlePart(part);
} else {
var file = { mime: part.mime, filename: part.filename, buffer: null };
var chunks = [];
part.on('data', function (chunk) {
chunks.push(chunk);
});
part.on('end', function () {
file.buffer = Buffer.concat(chunks); // merge all the chunks to a single buffer
chunks = null;
})
files[part.name] = file;
}
};
form.on('end', function () {
Object.assign(req, { fields, files });
next();
});
};
}
module.exports = parse;
exports.parse = parse; // backword compatibility
答案 0 :(得分:0)
问题是express-formidable
包。 Issue #6 of express-formidable on GitHub中记录了相同的行为。
非常感谢那些指引我正确方向的人。