节点 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 应用程序中的弃用警告的主要内容,如果未能解决你的问题,请参考以下文章
Mac Catalyst 中的弃用警告,但仅在 Objective-C 中,而不是在 Swift 中
sklearn MiniBatchKMeans 中的弃用警告