【问题标题】:App is getting crashed on duplicate response, Error is not catched应用程序因重复响应而崩溃,未捕获错误
【发布时间】:2023-01-26 00:42:56
【问题描述】:

我需要添加一个用户 我在从 thunderclient 访问这个端点时创建了这个 Auth.js 文件,我必须捕获错误并且必须发送一个 res.json 但没有发生我应该怎么做:

授权.js

const express=require('express');
const User = require('../models/User');
const router=express.Router();
const { body, validationResult } = require('express-validator');


router.post('/',[
        body('email').isEmail(),
        body('name').isLength({ min: 5 }),
        body('password').isLength({ min: 5 })
], async (req, res)=>{
        try{
        const errors = validationResult(req);
        if (!errors.isEmpty()) {
          return res.status(400).json({ errors: errors.array() });
        }
      
        User.create({
                name: req.body.name,
                password: req.body.password,
                email: req.body.email
              }).then(user => res.json(user));
        
        }
        catch(errors) { 
                console.error(errors)
                res.json({error:'Please Use A Unique Value'})
        }

        

})


module.exports = router

【问题讨论】:

  • 返回回调(新错误_1.MongoServerError(res.writeErrors[0])); ^ MongoServerError: E11000 重复键错误集合:inotebook.users index: email_1 dup key: { email: "us@nootik.com" } at index: 0, code: 11000, keyPattern: { email: 1 }, keyValue: { email : 'us@nootik.com' }, [Symbol(errorLabels)]: Set(0) {} } Node.js v18.8.0 [nodemon] 应用程序崩溃 - 在开始之前等待文件更改...
  • 你在 thunderclient 中得到什么回应?

标签: node.js mongodb express mongoose


【解决方案1】:

由于您没有在路由器中进行异步操作,因此 express 将忽略从您的 router.post 方法返回的错误,因为它被视为一个承诺。

您需要删除 async 关键字并使您的路由同步:

const express=require('express');
const User = require('../models/User');
const router=express.Router();
const { body, validationResult } = require('express-validator');


router.post('/',[
        body('email').isEmail(),
        body('name').isLength({ min: 5 }),
        body('password').isLength({ min: 5 })
], (req, res)=>{  // removed async keyword
        try{
        const errors = validationResult(req);
        if (!errors.isEmpty()) {
          return res.status(400).json({ errors: errors.array() });
        }
      
        User.create({
                name: req.body.name,
                password: req.body.password,
                email: req.body.email
              }).then(user => res.json(user));
        
        }
        catch(errors) { 
                console.error(errors)
                res.json({error:'Please Use A Unique Value'})
        }

        

})

【讨论】:

猜你喜欢
  • 2021-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-22
  • 2010-09-07
相关资源
最近更新 更多