0

我正在尝试从请求中提取数据(在本例中为 a POST)并且遇到了麻烦。我正在使用body-parser模块这样做。下面是我的部分代码(注意我使用的是 ES6 语法):

let bodyParser = require('body-parser')
var urlEncodedParser = bodyParser.urlEncoded({extended: true})

app.post('*', setFileMeta, setDirDetails, urlEncodedParser, (req, res, next) => {
    async ()=> {
        if (!req.stat) return res.send(405, 'File does not exist')
        if (req.isDir) return res.send(405, 'Path is a directory') // This is an advanced case

        await fs.promise.truncate(req.filePath, 0)
        req.pipe(fs.createWriteStream(req.filePath)) // Filepath is a file

        // This below line is where I need the body
        sendToClients('update', req.url, 'file', req.body, Date.now())

        res.end()
    }().catch(next)
})

对于使用实际提取数据body-parserurlEncoded是我能够成功完成它的唯一方法(数据现在只是一个字符串),它以{content: ''}内容是我正在使用的实际字符串的格式给我。这并不理想,但它的工作原理很简单。但是,这破坏了createWriteStream(req.filePath)如上所示 - 文件已创建,但没有内容。

因为我是 Node 和 Express 的新手,所以肯定有一些明显的地方做错了。由于我在教学视频的帮助下编写了大部分内容,我的直觉告诉我这是身体提取部分,因为我是自己做的。

4

1 回答 1

2

body-parser耗尽(完全读取)请求流以解析传入参数,因此请求流中没有数据可写入您的文件。

在我看来,您正在尝试实现文件上传。在这种情况下,您可能想要使用类似的模块multer而不是body-parser.

于 2015-05-02T06:55:38.373 回答