Node.js Multer在不可接受的文件mimetype上向客户端发送错误

Node.js Multer在不可接受的文件mimetype上向客户端发送错误,node.js,multer,Node.js,Multer,我使用multer处理上传文件。我想接受非常特定的文件mimetype,当用户尝试上载不可接受的mimetype文件时,我想发送一个错误:res.status(406).send(…)。这就是我尝试过的: const express = require('express'); const multer = require('multer'); const { saveLogFile, } = require('../controller/log'); const { body

我使用
multer
处理上传文件。我想接受非常特定的文件mimetype,当用户尝试上载不可接受的mimetype文件时,我想发送一个错误:
res.status(406).send(…)
。这就是我尝试过的:

const express = require('express');

const multer = require('multer');

const {
    saveLogFile,
} = require('../controller/log');
const {
    bodyKeys,
} = require('../middleware/security');
const {
    getRandomInt,
} = require('../util/math');

const router = express.Router();

const storage = multer.diskStorage({
    destination(req, file, cb) {
        if (file.mimetype !== 'application/octet-stream' && file.mimetype !== 'text/plain') {
            return cb(new Error('File mimetype is invalid.'));
        }
        
        cb(null, 'data/');
    },
    filename(req, file, cb) {
        const randomPostfix = getRandomInt(1000, 9999);
        const fileName = `temp-${randomPostfix}`;

        cb(null, fileName);
    },
});
const uploader = multer({
    storage,
}).single('file');

router.post(
    '/',
    uploader,
    bodyKeys([{ key: 'type', type: 'string' }, { key: 'mode', type: 'string' }]),
    saveLogFile,
    (error, req, res) => {
        console.log(error);
        res.status(406).send(error);
    },
);

module.exports = router;
但是当客户端在控制台(Google Chrome上的F12)中查看错误时,它会得到
500
错误,而不是
406
。我做错了什么

结果关闭控制台日志(错误):

错误:文件mimetype无效。
在DiskStorage.destination[作为getDestination](C:\Users\Tal\Desktop\Scanovate Logs\backend\router\log.js:20:23)
在DiskStorage.\u handleFile(C:\Users\Tal\Desktop\Scanovate Logs\backend\node\u modules\multer\storage\disk.js:31:8)
在C:\Users\Tal\Desktop\Scanovate Logs\backend\node\u modules\multer\lib\make middleware.js:144:17
在allowAll(C:\Users\Tal\Desktop\Scanovate Logs\backend\node\u modules\multer\index.js:8:3)
在wrappedFileFilter(C:\Users\Tal\Desktop\Scanovate Logs\backend\node\u modules\multer\index.js:44:7)
在公共汽车上。(C:\Users\Tal\Desktop\Scanovate Logs\backend\node\u modules\multer\lib\make middleware.js:114:7)
在Busboy.emit(events.js:315:20)
在Busboy.emit(C:\Users\Tal\Desktop\Scanovate Logs\backend\node\u modules\Busboy\lib\main.js:38:33)
在PartStream。(C:\Users\Tal\Desktop\Scanovate Logs\backend\node\u modules\busboy\lib\types\multipart.js:213:13)
在PartStream.emit(events.js:315:20)
在HeaderParser。(C:\Users\Tal\Desktop\Scanovate Logs\backend\node\u modules\dicer\lib\dicer.js:51:16)
在HeaderParser.emit(events.js:315:20)
在HeaderParser.\u完成(C:\Users\Tal\Desktop\Scanovate Logs\backend\node\u modules\dicer\lib\HeaderParser.js:68:8)
在SBMH。(C:\Users\Tal\Desktop\Scanovate Logs\backend\node\u modules\dicer\lib\HeaderParser.js:40:12)
在SBMH.emit(events.js:315:20)
在SBMH.\u SBMH\u提要(C:\Users\Tal\Desktop\Scanovate Logs\backend\node\u modules\streamsearch\lib\SBMH.js:159:14)
Error: File mimetype is invalid.
    at DiskStorage.destination [as getDestination] (C:\Users\Tal\Desktop\Scanovate-Logs\backend\router\log.js:20:23)
    at DiskStorage._handleFile (C:\Users\Tal\Desktop\Scanovate-Logs\backend\node_modules\multer\storage\disk.js:31:8)
    at C:\Users\Tal\Desktop\Scanovate-Logs\backend\node_modules\multer\lib\make-middleware.js:144:17
    at allowAll (C:\Users\Tal\Desktop\Scanovate-Logs\backend\node_modules\multer\index.js:8:3)
    at wrappedFileFilter (C:\Users\Tal\Desktop\Scanovate-Logs\backend\node_modules\multer\index.js:44:7)
    at Busboy.<anonymous> (C:\Users\Tal\Desktop\Scanovate-Logs\backend\node_modules\multer\lib\make-middleware.js:114:7)
    at Busboy.emit (events.js:315:20)
    at Busboy.emit (C:\Users\Tal\Desktop\Scanovate-Logs\backend\node_modules\busboy\lib\main.js:38:33)
    at PartStream.<anonymous> (C:\Users\Tal\Desktop\Scanovate-Logs\backend\node_modules\busboy\lib\types\multipart.js:213:13)     
    at PartStream.emit (events.js:315:20)
    at HeaderParser.<anonymous> (C:\Users\Tal\Desktop\Scanovate-Logs\backend\node_modules\dicer\lib\Dicer.js:51:16)
    at HeaderParser.emit (events.js:315:20)
    at HeaderParser._finish (C:\Users\Tal\Desktop\Scanovate-Logs\backend\node_modules\dicer\lib\HeaderParser.js:68:8)
    at SBMH.<anonymous> (C:\Users\Tal\Desktop\Scanovate-Logs\backend\node_modules\dicer\lib\HeaderParser.js:40:12)
    at SBMH.emit (events.js:315:20)
    at SBMH._sbmh_feed (C:\Users\Tal\Desktop\Scanovate-Logs\backend\node_modules\streamsearch\lib\sbmh.js:159:14)