无法在 Node.js 中提取请求数据(Express)

Trouble extracting request data in Node.js (Express)

我正在尝试从请求中提取数据(在本例中为 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-parser 实际提取的数据,urlEncoded 是我能够成功完成的唯一方法(目前数据只是一个字符串),它给了我采用 {content: ''} 格式,其中内容是我正在使用的实际字符串。这并不理想,但它的工作原理很简单。但是,如上所示,这会破坏 createWriteStream(req.filePath) - 文件已创建,但没有内容。

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

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

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