我正在使用this库进行文件上传。这里说
sampleFile.mv('/somewhere/on/your/server/filename.jpg', function(err) {
if (err)
return res.status(500).send(err);
res.send('File uploaded!');
});
但是我想通过await和async使用它,所以当我尝试
router.put("/upload", async(req,res)=>{
const isUploaded = await sampleFile.mv('/somewhere/on/your/server/filename.jpg');
console.log(isUploaded) // it gives me undefined over here.
});
答案 0 :(得分:1)
我已经遍历了您正在使用的库的.mv()代码。 它确实有希望的支持。
但是,它似乎使用空参数来解决()。
因此,如果要使用异步等待,可以使用
router.put("/upload", async(req,res)=>{
try{
await sampleFile.mv('/somewhere/on/your/server/filename.jpg');
res.send('File uploaded!');
} catch(err){
res.status(500).send(err);
});
您不能使用
const isUploaded = await mvPromise('/somewhere/on/your/server/filename.jpg');
它将始终是未定义的,因为它不返回任何内容。
答案 1 :(得分:1)
当没有提供回调时,图书馆支持promises,因此您应该可以等待它
要访问在中间件中创建的正确文件,您需要查看请求。同样,函数mv
的响应不应返回任何内容。只要不扔就可以了。
app.post("/upload", async (req, res) => {
if (!req.files || Object.keys(req.files).length === 0) {
return res.status(400).send("No files were uploaded.");
}
// The name of the input field (i.e. "sampleFile") is used to retrieve the uploaded file
let { sampleFile } = req.files;
// Use the mv() method to place the file somewhere on your server
try {
await sampleFile.mv("/somewhere/on/your/server/filename.jpg");
res.send("File uploaded!");
} catch (e) {
res.sendStatus(500);
}
});