节点运行时执行服务器端代码

时间:2017-09-21 01:51:52

标签: javascript node.js mongodb express

我正在为练习构建一个松散的复制猫应用程序,并希望实现用户创建自己的消息传递空间的能力。创建消息空间时,会创建一个唯一的密钥并将其存储到我的数据库中。我的计划是使用这些唯一键来提供具有消息传递功能的相同html页面。理论上这可行,但我无法检索密钥并使用它们路由到我的message.html文件。有没有办法运行我的服务器,检索密钥并将它们存储到全局变量那么路由到html页面?我使用的是Node,Express和MongoDB。

以下是我的代码在后端看起来像检索密钥:

var dbKeys = [];
db.messageSpaces.find({}, {"_id": 0, "name": 0}, function(error, data) {
    if (error) {
      console.log(error);
    }
    else {
    for (var i = 0; i < data.length; i++) {
        dbKeys.push(data[i].key);
    }
  }
});

我试图如何路由它们:

for (var i = 0; i < dbKeys.length; i++) {
    app.get(`/${dbKeys[i]}`, function(req, res) {
        res.sendFile(path.join(__dirname, "public/message.html"));
    });
}

1 个答案:

答案 0 :(得分:1)

我想我会使用app.get一次调用,并使用https://expressjs.com/en/guide/routing.html#route-parameters中描述的技术之一来执行格式的基本验证。也许是这样的:

app.get('/:id([a-z0-9]{16})', function(req, res) {
    console.log(req.params.id);    
});

以上假设id为16个字符长,仅由小写字母和数字组成。

然后,您将检查消息空间标识是否对应于get处理程序内的实际消息空间。如果它没有,您可以通过调用next()来处理错误或将其传递到中间件链上(您需要将next作为参数添加到您的处理程序中以使其工作)