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



我正在为练习构建一个松弛的复制猫应用程序,并希望实现用户创建自己的消息传递空间的能力。创建消息空间时,将创建一个唯一的密钥并将其存储到我的数据库中。我的计划是使用这些唯一的键使用具有消息传递功能的相同的HTML页面。从理论上讲,这将起作用,但是我很难检索键并使用它们将其路由到我的消息.html文件。有没有办法运行我的服务器,检索键并将其存储到全局变量,然后路由到HTML页面?我正在使用节点,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"));
    });
}

我想我会使用一个调用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个字符,仅由小写字母和数字组成。

您将检查消息空间ID是否对应于get处理程序内的真实消息空间。如果不这样做,您可以通过调用next()来处理错误或将其传递到中间件链上(您需要在处理程序中添加next作为参数才能工作)。

相关内容

最新更新