如何在 node.js 中设置受保护的路由?与我拥有的 userRoutes.js 相同
Posted
技术标签:
【中文标题】如何在 node.js 中设置受保护的路由?与我拥有的 userRoutes.js 相同【英文标题】:How to set a protected route in node.js? same as with the userRoutes.js that I have 【发布时间】:2021-05-08 23:50:57 【问题描述】:如何将 protected 设置为 router.route('/').get(protect, getProducts) 中的第一个参数 我正在尝试保护我的“/”路线与 router.route('/profile').get(protect, getUserProfile)
Here is my authMiddleware.js file
productController.js file
productRoutes.js file
这些是我使用相同中间件的用户文件:
This is my userRoutes
这是我下面的 userRoutes.js:
import asyncHandler from 'express-async-handler'
import generateToken from '../utils/generateToken.js'
import User from '../models/userModel.js'
// @desc Auth user & get token
// @route POST /api/users/login
// @access Public
const authUser = asyncHandler(async (req, res) =>
const email, password = req.body
const user = await User.findOne( email )
if (user && (await user.matchPassword(password)))
res.json(
_id: user._id,
name: user.name,
email: user.email,
isAdmin: user.isAdmin,
token: generateToken(user._id),
)
else
res.status(401)
throw new Error('Invalid email or password')
)
// @desc Register a new user
// @route POST /api/users
// @access Public
const registerUser = asyncHandler(async (req, res) =>
const name, email, password = req.body
const userExist = await User.findOne( email )
if (userExist)
res.status(400)
throw new Error('User already exists')
const user = await User.create(
name,
email,
password,
)
if (user)
res.status(201).json(
_id: user._id,
name: user.name,
email: user.email,
isAdmin: user.isAdmin,
token: generateToken(user._id),
)
else
res.status(400)
throw new Error('Invalid user data')
)
// @desc Get user profile
// @route GET /api/users/profile
// @access Private
const getUserProfile = asyncHandler(async (req, res) =>
const user = await User.findById(req.user._id)
if (user)
res.json(
_id: user._id,
name: user.name,
email: user.email,
isAdmin: user.isAdmin,
)
else
res.status(404)
throw new Error('User not found')
)
export authUser, registerUser, getUserProfile
【问题讨论】:
请将您的代码作为文本添加到您的问题中(并注意code formatting)。还有many good reasons,为什么图片代码不是个好主意。 你能说一下你到底想要什么吗?你想保护路由中的中间件吗? 问题可以缩小吗?这是重现问题所需的最少代码吗?通过这样做你可能会找到答案。 【参考方案1】:我认为你可以这样做:
router.get('/', [protect], getProducts);
调用你的中间件并简化语法:)
【讨论】:
感谢您的回复。在我的屏幕上显示它时我仍然遇到问题我认为它与 jwt 和其他东西有关。我将用用户示例更新我的问题:)以上是关于如何在 node.js 中设置受保护的路由?与我拥有的 userRoutes.js 相同的主要内容,如果未能解决你的问题,请参考以下文章
使用 Express.js 在 Node.js 中设置路由的最佳方式