首页 > 解决方案 > UnhandledPromiseRejectionWarning:ValidationError:file validatiofailed:uuid:Cast to Number failedfor value"dc1-c7ffd748df"(type string) at path"uuid

问题描述

我正在尝试使用 nodejs 制作文件上传器。当我在邮递员中上传文件后尝试对其进行测试时,我收到以下错误消息。

(节点:9992)UnhandledPromiseRejectionWarning:ValidationError:文件验证失败:uuid:Cast to Number 值“dc1c9e3c-2931-480a-87cf-c4c7ffd748df”(类型字符串)在model.Document.invalidate(C: \Users\Win10\filesender\node_modules\mongoose\lib\document.js:2879:32) 在 model.$set (C:\Users\Win10\filesender\node_modules\mongoose\lib\document.js:1426:12)在 model.$set (C:\Users\Win10\filesender\node_modules\mongoose\lib\document.js:1128:16) 在 model.Document (C:\Users\Win10\filesender\node_modules\mongoose\lib\document .js:148:12) 在 model.Model (C:\Users\Win10\filesender\node_modules\mongoose\lib\model.js:106:12) 在新模型 (C:\Users\Win10\filesender\node_modules\ mongoose\lib\model.js:4751:15) 在 C:\Users\Win10\filesender\router\files.js:30:23 在立即。(C:node --trace-warnings ...显示警告的创建位置)(节点:9992)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。要在未处理的 Promise 拒绝时终止节点进程,请使用 CLI 标志--unhandled-rejections=strict(请参阅 https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。(拒绝 id:1)(节点:9992)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。

我的文件.js

const router = require('express').Router();
const multer = require('multer'); 
const File = require('../model/model');
const path = require('path');
const { v4: uuidv4 } = require('uuid');

let storage=multer.diskStorage({
    destination:(req,file,cb)=>cb(null,'uploads/'),
    filename:(req,file,cb)=>{
        //const uniquename =`${Date.now()}-${Math.round(Math.random()* 1E9)} ${(file.originalname)}`;
        const uniquename = `${Date.now()}-${Math.round(Math.random() * 1E9)}${path.extname(file.originalname)}`;
    cb(null,uniquename);
    }
})

let upload = multer({
    storage,
    limit: {fileSize:1000000 * 1000}
}).single('myfile')

router.post('/', (req,res)=>{

    // store file
    
    upload(req,res,async (e)=>{
        if(!req.file) res.json("file is mandatory");
        if(e){
            res.status(500).json({error:e.message});
        }
        const file =  new File({
            filename:req.file.filename,
            uuid:uuidv4(),
            path:req.file.path,
            size:req.file.size
        });
        const response= await file.save();
        res.json(`${process.env.APP_BASE_URL}/file/${response.uuid}`);
    })

})

module.exports = router;

在这里,我可以看到当我从邮递员发送帖子请求时,文件正在“上传”文件夹中上传。但是,我没有给出这个 url (${process.env.APP_BASE_URL}/file/${response.uuid}) 作为响应,而是给出了上述错误。提前谢谢..

标签: javascriptnode.js

解决方案


推荐阅读