Javascript nodejs应用程序中的弃用警告

Javascript nodejs应用程序中的弃用警告,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,my user.js const express=require('express') const router=express.Router() const gravatar=require('gravatar') const bcrypt=require('bcryptjs') const {check,validationResult} =require('express-validator/check') const User=require('../../models/User')

my user.js

const express=require('express')
const router=express.Router()
const gravatar=require('gravatar')
const bcrypt=require('bcryptjs')
const {check,validationResult} =require('express-validator/check')

const User=require('../../models/User')

//@route  POST api/users
//@desc   Register user
//@access public
router.post('/',[
check('name','Name is required').not().isEmpty(),
check('email','please include a valid email').isEmail(),
check('password','please enter password with more than 6 characters').isLength({min:6})
],async(req,res)=>{
const errors=validationResult(req);
if(!errors.isEmpty()){
    return res.status(400).json({errors:errors.array()})
}

const {name,email,password}=req.body;

try{
 //see if the user exists
let user = await User.findOne({ email: email })

//if record exists in DB
if (user) {
    return res.status(400).json({ errors: [{ msg: "user already exists" }] });
}

 //get users gravatar
 const avatar=gravatar.url(email,{
     s:'200', //size
     r:'pg',  //rating of image
     d:'mm'   //gives a default image
 })
user=new User({
    name,
    email,
    avatar,
    password
})
 //encrpyt password 
 const salt=await bcrypt.genSalt(10) // 10-no of rounds.more the better

 user.password=await bcrypt.hash(password,salt); //coverts to hash pass

 await user.save();

 //return jsonwebtoken

 res.send('User registered')
}catch(e){
    console.log(e.message)
    res.status(500).send('server error')
}

res.send('User route')
})

module.exports=router;
该应用程序运行良好,但在终端中我得到

(节点:1022)未处理的PromisejectionWarning:错误[ERR_HTTP_HEADERS\u SENT]:发送到客户端后无法设置头 在ServerResponse.setHeader(_http_outgoing.js:464:11) 在ServerResponse.header(/Users/udayshetty/Desktop/MERN app/node_modules/express/lib/response.js:771:10) 在ServerResponse.send(/Users/udayshetty/Desktop/MERN app/node_modules/express/lib/response.js:170:12) at/Users/udayshetty/Desktop/MERN-app/routes/api/Users.js:60:9 在处理和拒绝时(内部/process/task_queues.js:85:5) (节点:1022)未处理的PromisejectionWarning:未处理的承诺拒绝。此错误源于在没有catch块的异步函数中抛出,或者拒绝未使用.catch()处理的承诺。(拒绝id:1)
(节点:1022)[DEP0018]弃用警告:未处理的承诺拒绝已弃用。将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程。

当您的应用程序通过HTTP响应客户端,并且您尝试发送两次响应/响应头时,会发生此错误。发送响应后,连接将关闭。对于给定的http请求,只能发送一次。您可以保持连接打开并发送更多数据,但不能再次发送响应标头

请尝试删除res.send('User route')


您发送了两次响应。

您的底部有
res.send('User route')
,它正在尝试发送第二次响应。只要删除它,错误就会消失。users.js中的第60行是res.send('User route'),删除不必要的行谢谢解决了它的可能重复的人