我正在为练习构建一个松散的复制猫应用程序,并希望实现用户创建自己的消息传递空间的能力。创建消息空间时,会创建一个唯一的密钥并将其存储到我的数据库中。我的计划是使用这些唯一键来提供具有消息传递功能的相同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"));
});
}
答案 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
作为参数添加到您的处理程序中以使其工作)