Javascript /path/{?}可以用在nodejs中的path中吗?

Javascript /path/{?}可以用在nodejs中的path中吗?,javascript,node.js,express,hapijs,Javascript,Node.js,Express,Hapijs,我对node.js比较陌生,正在尝试编写一个路由,如果提到的端点以/api开头,它将检查所有用户的授权。 我读它的可选值?可以像这样使用{u id?},但是可以像{?}一样使用吗。 我如何将这个路由调用到另一个路由中,这个路由实际上执行GET方法的工作 当前该方法如下所示 server.route({ method: 'GET', path: '/api/something/nothing/{_id?}', handler: function (request

我对node.js比较陌生,正在尝试编写一个路由,如果提到的端点以/api开头,它将检查所有用户的授权。 我读它的可选值?可以像这样使用{u id?},但是可以像{?}一样使用吗。 我如何将这个路由调用到另一个路由中,这个路由实际上执行GET方法的工作

当前该方法如下所示

 server.route({
 method: 'GET',
        path: '/api/something/nothing/{_id?}',
        handler: function (request, reply) {
            Controller.vcontroller.get(request.headers.authorization, request.params, function (err, success) {
                console.log(request.headers);
                console.log(request.headers.authorization);
                if (err) {  
                    reply(func.sendError(err));
                } else {
                    reply(func.sendSuccess(APP_CONSTANTS.STATUS_MSG.SUCCESS.DEFAULT, success)).code(200);
                }
            });
        },
        config: {
            description: 'desc',
            tags: ['api', 'order'],
            validate: {
                headers: func.authorizationHeaderObj,
                params: {
                    order_id: Joi.string().required().trim(),
                    _id: Joi.string().optional().trim()
                },
                failAction: func.failActionFunction
            },
            plugins: {
                'hapi-swagger': {
                    responseMessages: APP_CONSTANTS.swaggerDefaultResponseMessages
                }
            }
        }
    }
});
当我通过endpoint/api时,它应该分别检查所有用户对GET-PUT-POST和DELETE的授权

换句话说,我需要全球授权,这是路线特定的


你能建议一种实施方法吗?

我不完全清楚我是否理解你的问题,所以我会重申我认为你在问什么,然后回答。如果我不理解,请澄清

我想您要问的是,是否可以在任何时候有人点击以
/api
开头的URL路径时运行检查,这可能是出于用户授权的目的

答案是,是的,您可以将其合并到中间件中(尽管我强烈建议您满足所有身份验证需求)

也就是说,如果您正在使用,那么您可以在路由开始时添加中间件,如下所示:

app.use('/api', (req, res, next) => {
  // trivial implementation, not for production
  const users = ['bob', 'mari', 'hasan'];
  if (users.indexOf(req.user) >= 0) {
     // user is authorized
     return next();
  }
  // Forbidden
  return res.sendStatus(403);
});

将它放在其他路由之前,任何以
/api
开头的路由都将首先通过此路由。显然,我假设您以某种方式在此处填充了
req.user
,但如果您按照我的建议使用Passport,则将为您完成此操作。

要检查所有以/api开头的端点请求是否都已获得授权,请使用中间件,即

app.use('/api', (req, res, next) => {
  // this uses passport.js for auth, you could use something else
  if(req.isAuthenticated()) {  
    return next();
  }else{
    return res.status(401).send();
  }
});

你真的需要提供一个小的代码示例。更新了问题。那么现有路由需要做哪些更改,以及它将如何影响响应?这取决于你的身份验证方法。我的答案是关于你最初的问题为什么有人-1答案…最初的问题是询问是否可以验证对端点的所有请求都以/api结尾,简单而聪明。很好。