Uploading document in NodeJs using Fs module : Error: write after end
Uploading document in NodeJs using Fs module : Error: write after end
我一直在尝试使用以下代码上传文档。
我用谷歌搜索了,但目前还没有找到任何解决方案。
app.post('/documents', function (req, res) {
var document = {};
var fstream = null;
// populate fields
form.on("field", function (name, value) {
document[name] = value ;
});
form.on("part", function (part) {
if (!part.filename) {
return;
}
var path = __dirname + '/files/' + part.filename;
fstream = app.npm.fs.createWriteStream(path);
document.type = part.headers["content-type"]
document.name = part.filename;
document.size = part.byteCount;
document.path = path;
fstream.on("close", function () {
db.sequelize.models.Document.create(document).then(function (newDocument) {
res.send(newDocument)
res.end();
},
function (error) {
res.send(error);
});
});
part.pipe(fstream);
});
form.on("close", function (data) {
fstream.end();
fstream = null;
});
form.parse(req);
});
注意:我正在使用 fs 模块。 https://nodejs.org/api/fs.html
第一张图没问题。但是当我尝试上传另一张图片时,它会抛出异常:
events.js:72
扔呃; // 未处理的 'error' 事件
^
Error: write after end
at writeAfterEnd (_stream_writable.js:132:12)
at Form.Writable.write (_stream_writable.js:180:5)
at write (_stream_readable.js:601:24)
at flow (_stream_readable.js:610:7)
at IncomingMessage.pipeOnReadable (_stream_readable.js:642:5)
at IncomingMessage.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:426:10)
at emitReadable (_stream_readable.js:422:5)
at readableAddChunk (_stream_readable.js:165:9)
at IncomingMessage.Readable.push (_stream_readable.js:127:10)
找到解决方案。
var form = new app.npm.multiparty.Form();
这是在全球范围内定义的。
对于每个新请求,我应该创建一个新的表单实例,因为在上一次调用中流已关闭,所以我应该通过获取最新内容来创建一个新实例。
解决方案看起来像:
app.post('/文档', 函数 (req, res) {
var document = {};
var form = new app.npm.multiparty.Form();
var fstream = null;
...
其余同理
我一直在尝试使用以下代码上传文档。
我用谷歌搜索了,但目前还没有找到任何解决方案。
app.post('/documents', function (req, res) {
var document = {};
var fstream = null;
// populate fields
form.on("field", function (name, value) {
document[name] = value ;
});
form.on("part", function (part) {
if (!part.filename) {
return;
}
var path = __dirname + '/files/' + part.filename;
fstream = app.npm.fs.createWriteStream(path);
document.type = part.headers["content-type"]
document.name = part.filename;
document.size = part.byteCount;
document.path = path;
fstream.on("close", function () {
db.sequelize.models.Document.create(document).then(function (newDocument) {
res.send(newDocument)
res.end();
},
function (error) {
res.send(error);
});
});
part.pipe(fstream);
});
form.on("close", function (data) {
fstream.end();
fstream = null;
});
form.parse(req);
});
注意:我正在使用 fs 模块。 https://nodejs.org/api/fs.html
第一张图没问题。但是当我尝试上传另一张图片时,它会抛出异常:
events.js:72 扔呃; // 未处理的 'error' 事件 ^
Error: write after end at writeAfterEnd (_stream_writable.js:132:12) at Form.Writable.write (_stream_writable.js:180:5) at write (_stream_readable.js:601:24) at flow (_stream_readable.js:610:7) at IncomingMessage.pipeOnReadable (_stream_readable.js:642:5) at IncomingMessage.emit (events.js:92:17) at emitReadable_ (_stream_readable.js:426:10) at emitReadable (_stream_readable.js:422:5) at readableAddChunk (_stream_readable.js:165:9) at IncomingMessage.Readable.push (_stream_readable.js:127:10)
找到解决方案。
var form = new app.npm.multiparty.Form();
这是在全球范围内定义的。 对于每个新请求,我应该创建一个新的表单实例,因为在上一次调用中流已关闭,所以我应该通过获取最新内容来创建一个新实例。
解决方案看起来像:
app.post('/文档', 函数 (req, res) {
var document = {};
var form = new app.npm.multiparty.Form();
var fstream = null;
...
其余同理