node.js - 添加身份验证后 Express GET 请求不起作用
问题描述
我被困在这个非常简单的问题上,我不知道我做错了什么。我正在创建一个简单RESTAPI
的用户和身份验证。这是我试图运行的 GET 请求:
router.get('/users/me',auth ,async(req,res)=>{
console.log(req.user)
console.log('Entered the get request')
res.send(getUserData(req.user)) })
基本上,在身份验证结束时,我将从数据库中获取的用户保存到req.user
对象中,然后使用res.send(req.user)
. 正如您在下面的代码中看到的:
const auth = async(req,res,next)=>{
try{
const token = req.header('Authorization').replace('Bearer ','')
const decoded = jwt.verify(token,'secretkey')
const db = req.app.locals.database
const user = await db.collection('users').findOne({
_id: decoded.id,
'tokens.token':token
})
console.log(user)
if(!user){
throw new Error()
}
req.user = user
next()
}catch(e){
res.status(401).send('Please Authenticate')
}}
问题是此身份验证功能运行良好。我也在其他路线上使用过它。但是在这个GET
请求中,身份验证功能运行(我使用许多控制台日志识别了这一点)并正确获取数据。但是一旦中间件(auth 函数)完成调用,它就不会进入 get 请求。从邮递员那里,当我发送GET
请求时,我得到一个404 error
,但我不知道为什么。我确实花了几个小时试图理解这一点。如果您知道可能是什么问题,请帮助我。
编辑:所以我能够通过将请求移到我在同一个文件中也有的以下请求之上来运行获取请求:
router.get('/users/:id',auth ,async(req,res)=>{
const id = req.params.id
const db = req.app.locals.database
try{
const result = await db.collection('users').findOne({_id: id})
const userData = getUserData(result)
res.status(200).send(userData)
}catch(e){
res.status(404).send()
}
})
但是现在这个请求不起作用。我无法弄清楚定位与请求功能有什么关系。谁能解释一下?
解决方案
推荐阅读
- python - 刷新后Http服务器显示相同的页面?
- xamarin - xamarin 进程启动错误访问被拒绝
- apache-flink - Flink Windows 边界、水印、事件时间戳和处理时间
- python - 使用字典理解将文件中的键、值解析为字典
- sql-server - 加入不成功时显示0
- docker - 如何在不杀死原始 pod 的情况下更改 k8s 的 pod 限制?
- powershell - 我可以重复使用 Powershell 验证块中定义的变量吗?
- python - Kivy界面退出延迟,win10不流畅
- sql - 为什么我用 Sum() 和 GroupBy 得到多行
- javascript - 如何更改矩阵中的单个元素?