无法在 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
.
我正在尝试从请求中提取数据(在本例中为 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
.