Javascript nodejs应用程序中的弃用警告
my user.jsJavascript 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')
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'),删除不必要的行谢谢解决了它的可能重复的人