首页 > 解决方案 > 如何使用猫鼬创建多站点 url 以将特定信息存储到特定站点

问题描述

在我的应用程序中,有一个名为“创建站点”的选项将创建一个新的站点 URL。所以问题是我有这么多的集合,我需要向相关站点显示相关数据。

作为管理员,我可以创建任意数量的站点,其中包含许多选项,例如“创建用户”、“我的帐户”、“创建项目”、“设置”等(在导航栏中)。因此,在选择这些选项时,它应该获取与该选项和该站点相关的数据......

为了更好地理解,例如:在我的应用程序中,假设如果我创建一个新站点 URL,例如"www.mywebsite/new-website"- 这个 URL 是一个新网站,默认情况下它不包含任何数据,所有选项都像“创建用户,创建项目等”。 “只有当我添加一些数据时才会有数据。

我将创建另一个站点 URL,例如"www.mywebsite/new-website1"- 最初不会出现任何数据,添加后将包含相关信息。

在 MongoDB 中,如何使用单个数据库来实现这一点?所以我正在使用 MEAN 堆栈应用程序我需要一个关于如何实现这种情况的解决方案,有人可以帮助我清楚地了解 MongoDB 在这种情况下的使用情况,我将不胜感激。

谢谢!

标签: node.jsmongodbexpressmongoose

解决方案


通过使用快速路由,一种简单的方法是通过将路由器作为中间件附加到其他路由器上来嵌套路由器。

通过这种方式,您可以拥有一个网站集合,并在所有其他集合中使用 websiteId 作为参考。

所以路线变成:

GET /->hello websites

GET /new-website->Hello from Website : new-website

GET /new-website/users->List users from website : new-website

GET /new-website/users/101->Hello User : 101 from website : new-website

var express = require("express");
var app = express();

var siteRouter = express.Router();
// you need to set mergeParams: true on the router,
// if you want to access params from the parent router
var userRouter = express.Router({ mergeParams: true });

// you can nest routers by attaching them as middleware:
siteRouter.use("/:sitename/users", userRouter);

siteRouter.route("/").get(function(req, res) {
  res.status(200).send("hello websites");
});

siteRouter.route("/:sitename").get(function(req, res) {
  res.status(200).send("Hello from Website : " + req.params.sitename);
});

userRouter.route("/").get(function(req, res) {
  res.status(200).send("List users from website " + req.params.sitename);
});

userRouter.route("/:userId").get(function(req, res) {
  res
    .status(200)
    .send(
      "Hello User : " + req.params.userId + " from website :" + req.params.sitename
    );
});

app.use("/", siteRouter);

app.listen(3000);

注意:- 我只添加了 GET 请求,使用 POST 请求创建网站,响应式路由中的用户,并且在授予对路由的访问权之前必须检查足够的授权。


推荐阅读