节点 js 应用程序中的弃用警告

Posted

技术标签:

【中文标题】节点 js 应用程序中的弃用警告【英文标题】:DeprecationWarnings in nodejs application 【发布时间】:2020-03-08 06:58:07 【问题描述】:

我的用户.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;

应用程序运行良好,但在终端中我得到了

(node:1022) UnhandledPromiseRejectionWarning: 错误 [ERR_HTTP_HEADERS_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) 在 /Users/udayshetty/Desktop/MERN app/routes/api/users.js:60:9 在 processTicksAndRejections (internal/process/task_queues.js:85:5) (node:1022) UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。 (拒绝编号:1) (节点:1022)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。

【问题讨论】:

您在底部有res.send('User route'),它正试图发送第二个响应。只需删除它,错误就会消失。 users.js 中的第 60 行是 res.send('User route'),删除不需要的行 感谢解决它的人 Error: Can't set headers after they are sent to the client的可能重复 【参考方案1】:

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

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

您发送了两次响应。

【讨论】:

以上是关于节点 js 应用程序中的弃用警告的主要内容,如果未能解决你的问题,请参考以下文章

Python中的弃用警告,在这里有意义吗?

Bootstrap SCSS 中的弃用警告

Mac Catalyst 中的弃用警告,但仅在 Objective-C 中,而不是在 Swift 中

sklearn MiniBatchKMeans 中的弃用警告

Squeel load_core_extensions 的弃用警告

关闭 PHP.ini 文件 WAMP 中的弃用警告