gpt4 book ai didi

node.js - 在 Express 中使用 Multer 设置响应状态?

转载 作者:可可西里 更新时间:2023-11-01 17:18:07 26 4
gpt4 key购买 nike

我正在使用 Multer 作为 Express 中间件。在我的示例中,我正在检查文件扩展名和 mimetype 是否正确(对于 wave 文件),如果不正确,我想用 415 进行响应。但是我不知道如何使用 Multer 的 fileFilter 执行此操作,所以我正在检查该文件是否存在于路由器处理程序的请求对象中,这感觉有点尴尬。也可能我想在未来实现不同的 fileFilter 和错误代码。在 Express 中使用 Multer 设置响应状态是否有推荐的模式?

const upload = multer(
{
dest: UPLOAD_PATH,
fileFilter: function(req, file, cb) {
const filetypes = /wave|wav/;
const mimetype = filetypes.test(file.mimetype);
const extname = filetypes.test(
path.extname(file.originalname).toLowerCase());
cb(null, (mimetype && extname));
},
}
);

router.post('/', upload.single('wave'), (req, res) => {
const file = req.file;
if (!file) {
return res.status(415).send('Only audio/wav files are supported.');
}
// Do some async task with file
return res.sendStatus(200);
});

最佳答案

你可以这样做:

const upload = multer({
dest: 'uploads/',
fileFilter: function (req, file, cb) {
const filetypes = /wave|wav/;
const mimetype = filetypes.test(file.mimetype);
const extname = filetypes.test(
path.extname(file.originalname).toLowerCase());

if (mimetype && extname) {
cb(undefined, true);
} else {
req.notWAVEMimeType = 'Only audio/wav files are supported.';
return cb(undefined, false);
}
}
});

router.post('/', upload.single('wave'), (req, res) => {
if (req.notWAVEMimeType) {
return res.status(415).end(req.notWAVEMimeType);
}

// Do some async task with file
return res.sendStatus(200);
});

请求对象上的 notWAVEMimeType 属性允许您将错误消息返回到 POST 方法。根据这个你可以添加其他mime类型,然后检查req的相关属性是否存在。

关于node.js - 在 Express 中使用 Multer 设置响应状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52833003/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com