如何在/ reset /之后用任何字符串指定Express Route

时间:2018-06-01 10:08:56

标签: node.js regex express

我正在构建一个Node / Express.js webapp,我不希望webapp的任何用户访问除索引,忘记传递和重置之外的页面而不登录。我正在使用此重置路由重置密码。所以我在/ reset /之后发送一个随机令牌(例如:www./reset/4c1ff3ada180bea9da6333fd9555dd100828d530)。我已经设置了一个基本的中间件来限制访问其他页面而无需登录。

这是我的中间件。

'use strict';
var express = require('express');

module.exports = {
    isLoginCheck : function (request, response, next) {
      if(!request.session.user && request.path != '/index' && request.path != '/forgot-pass' && request.path != '/forgot' && request.path != '/reset/*'){
         response.redirect('/index');
      }else{
         next();
      }
   },
};

但是/ reset / *与我的路由不匹配,因此会将我抛回索引页面。我需要在/ reset /之后发送令牌,以便我可以查询数据库以重置密码。

那么如何在/ reset /?

之后指定任何随机字符串

这是/ reset的路由器。

router.get('/reset/:token', indexController.pagesReset);

3 个答案:

答案 0 :(得分:0)

问题来自您的情况,路径(如果您在/reset/egze5g上的情况不是/reset/*而是/reset/egze5g

您可以使用正则表达式替换此条件:request.path.match(/\/reset\/[\w]+/)

以防万一:你可以通过

替换你满意的条件来清理你的代码

if (!request.session.user && !['/index', '/forgot-pass', '/forgot'].includes(request.path) && !request.path.match(/\/reset\/[\w+]/)){

答案 1 :(得分:0)

此正则表达式捕获/reset/之后的所有内容。

(?:\/reset\/)(.+)

var myString = "/reset/fhlkejg234hk";
var myRegexp = /(?:\/reset\/)(.+)/g;
var token = myRegexp.exec(myString)[1];
console.log(token);

答案 2 :(得分:0)

为了更好地扩展,请尝试这样的事情

'use strict';
const express = require('express');

let app = express();

app.use('/users/:user_id', function(req, res, next) {
    console.log(req.params.user_id);
    res.send(req.params.user_id);
});

app.use(["/index","/forgot"], function (req, res, next) {
    console.log("For index")
    res.send("For index/forgot")
});

app.use("/", function (req, res, next) {
    console.log("For all other links")
    res.send("For all other links")
});

app.listen("2010",()=>console.log("Server at 2010"));

请参阅https://expressjs.com/en/guide/writing-middleware.html以便在快递中创建中间件