NodeJS 获取错误.include()不是函数,即使我传递了数组

yhxst69z  于 2023-05-06  发布在  Node.js
关注(0)|答案(3)|浏览(261)

我试图写一个中间件,检查是否是试图检索所有用户的数据的用户是一个管理员或没有,为了测试的目的,我已经手动传递了一个数组isAuthorized功能。

userRouter.use(isAuthorized(['admin']));
userRouter
.route('/')
.get(getAllUsers);

isAuthorized函数如下所示:

module.exports.isAuthorized = function isAuthorized(roles) { 
    return function(req,res,next) {
        try{
            if(roles.include('admin')) {
                next();
            }
            else {
                res.status(401).json({
                    message:"User not authorized"
                });
            }
        }
        catch(error) {
            return res.json({
                message: error.message
            });
        }
    }
}

我收到一个错误:roles.include不是函数
请帮帮忙!!
我试着在谷歌上搜索同样的错误,并在stackoverflow和其他网站上查找以前发布的解决方案,但没有一个有效。

roejwanj

roejwanj1#

看起来你把数组上的方法拼错了。尝试使用roles.includes('admin')而不是roles.include('admin'),它应该可以正常工作。

ruarlubt

ruarlubt2#

您尝试调用的方法的正确名称是.includes()。您可能需要查找documentation中的数组方法,以确保您使用了正确的方法,并查找任何不清楚的行为。

8oomwypt

8oomwypt3#

如果admin是模式的一部分,则只需检查isAdmin是否在请求体中

module.exports = function (req, res, next) {
    if (!req.body.isAdmin ) {
        return res.status(401).json({ success: false, message: "Sorry, you need admin access for this route" })
      }
      next()

};

然后在你的路线上

const isAdmin = require("../middelwares");

userRouter.use(isAdmin);
userRouter
.route('/')
.get(getAllUsers);

相关问题