首页 > 解决方案 > 如何连接到 mongodb atlas 集群以使用节点 js 创建新数据库

问题描述

我目前正在创建一个多租户应用程序,每当新用户使用特定路由注册时,它都会使用公司名称创建一个数据库,并将信息保存在我的默认数据库(测试)中。

使用我的本地 MongoDB 可以做到这一点,但我无法使用我的 mongo atlas 帐户来实现这一点,而且我还在 URL 上传递了我的 MongoDB,但我无法实现这一点

这是注册码

// @route   Post api/user/register
// @desc    Register New User
// @access  Public
router.post("/register", async (req, res) => {
  const { errors, isValid } = validateRegisterInput(req.body)
  //Check Validation
  if (!isValid) {
    return res.status(400).json(errors);
  }

  try {
    const {
      name,
      email,
      password,
      company,
      password2,
      username,
      country,
      address } = req.body;

    const admin = await Admin.findOne({ email: email });

    if (admin) {
      res.status(400).json({
        errors: { msg: "User Already Exist" }
      });
    }
    const secretToken = generateRandomString(30);

    const newAdmin = new Admin({
      name,
      email,
      password,
      secretToken,
      company,
      username,
      country,
      address,
      connection: {
        domain: company,
        db: username,
        password: password
      },
    });

    bcrypt.genSalt(10, (err, salt) => {
      bcrypt.hash(newAdmin.password, salt, (err, hash) => {
        newAdmin.password = hash;
        newAdmin
          .save()
          .then(admin => {
            let url = "mongodb://localhost:27017/"; // want to change this to connect to mongodb url so it can create new database...

            MongoClient.connect(url, function (err, db) {
              if (err) throw err;
             const dbo = db.db(`${newAdmin.company}`);
              const details = {
                name: `${newAdmin.name}`,
                address: `${newAdmin.address}`,
                password: `${newAdmin.name = hash}`,
                role: 1,
                email: `${newAdmin.email}`,
                isVerified: true,
              };
              dbo.collection("users").insertOne(details, function (err, res) {
                if (err) throw err;
                console.log("1 document inserted");
                db.close();
              });
            });
            res.status(200).json("successfully create user and user database");
          })
          .catch(err => console.log(err));
      });
    });
  } catch (error) {
    console.error(error);
    res.status(500).send("Server error");
  }
});

这是我的 server.js 使用户注册成为可能

const express = require("express");
const config = require("config");
const morgan = require("morgan");
const mongoose = require("mongoose");
const bodyParser = require("body-parser");

// Init App
const server = express();

// DB Config
mongoose
  .connect(config.get("mongoURI"), {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useCreateIndex: true,
    useFindAndModify: false
  }) // Let us remove that nasty deprecation warrning :)
  .then(() => console.log("MongoDB Connected"))
  .catch(err => console.log(err));

// Middleware
server.use(morgan("dev"));
server.use(bodyParser.json());
server.use(bodyParser.urlencoded({
  extended: true
}));

// Routes
server.use("/api/start", require("./api/Start"));


// Config
server.listen(config.get("port"), () => console.log("server process runing", `${config.get("port")}`));

标签: node.jsmongodb

解决方案


推荐阅读