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;

...

其余同理