在 NodeJS 和 MongoDB 后端配置多个数据库 --

Configuring multiple database in a NodeJS & MongoDB Backend --

如何在 NodeJS ExpressJS 后端项目中实例化、配置和使用多个不同的 MongoDB 数据库名称?我猜 MongoDB 中没有 'Tables' 的概念。我正在使用数据库 'playerDB' 并很好地使用它来添加、获取数据等。现在在我的项目中,我还想拥有用户登录和注册 [with roles] 的概念,因此需要一个新的数据库 'userDB'.

我该怎么做?在 Node Express Mongo 域中是否完全允许或允许?项目结构应该如何?我是将 mongoose 连接和相关内容全部写在一个 server.js 文件中还是在不同的此类文件中?

这是什么?我应该怎么做?

您可以使用一个数据库和多个集合。集合就像关系数据库管理系统中的表。您可以创建一个名为 "users" 的集合,然后您可以使用创建、更新、删除和提取操作。

所以我基本上就是这样实现的。就像我提到的,我不得不更改与 JWT_SECRET.

相关的一些部分

我的最终 server.js 看起来像这样 -->

        const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const PORT = 4000;
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const playerRoutes = express.Router();
const userRoutes = express.Router();
const userController = require('./controllers/userController');
const user_routes = require('./apiroutes/route');
const app = express();

const JWT_SECRET = "$#GR24T4344$#$@#%WTEWTEAE%";


const users = "users";

require("dotenv").config({path: __dirname+ '../.env'});



let Player = require('./models/player.model');
let User = require('./models/user.model');

app.use(cors());
app.use(bodyParser.json());

app.use(
    bodyParser.urlencoded({
        extended: false
    })
);

mongoose.connect('mongodb://127.0.0.1:27017/playerDB', function (err, db) {
    if (err)
        throw err;
    db.createCollection(users, function (err, resp) {
        if (err)
            throw err;
        console.log("Collection created!");

    });
}, { useNewUrlParser: true });


const connection = mongoose.connection;

connection.once('open', function () {
    console.log("MongoDB database connection established successfully");
});

playerRoutes.route('/').get(function (req, res) {
    Player.find(function (err, players) {
        if (err) {
            console.log(err);
        } else {
            res.json(players);
        }
    });
});


playerRoutes.route('/:id').get(function(req, res) {
    let id = req.params.id;
    Player.findById(id, function(err, player) {
        res.json(player);
    });
});

playerRoutes.route('/add').post(function (req, res) {
    let player = new Player(req.body);
    player.save()
        .then(player => {
            res.status(200).json({ 'player': 'player added successfully' });
        })
        .catch(err => {
            res.status(400).send('adding new player failed');
        });
});


var query = Player.find({ player_: "Hall of Fame" });


playerRoutes.route('/hallOfFame').get(function (req, res) {
    query.exec(function (err, players) {
        if (err) {
            return handleError(err);
        }
        else {
            res.json(players);
        }
    });
});


playerRoutes.route('/update/:id').post(function(req, res) {
    Player.findById(req.params.id, function(err, todo) {
        if (!player)
            res.status(404).send('player data is not found');
        else
            player.player_name = req.body.player_name;
            player.player_description = req.body.player_description;
            player.player_position = req.body.player_position;
            player.player_age=req.body.player_age;
            player.player_club=req.body.player_club;
            player.player_=req.body.player_;
            player.player_isactive = req.body.player_isactive;
            player.player_completed = req.body.player_completed;

            Player.save().then(player => {
                res.json('Player updated');
            })
            .catch(err => {
                res.status(400).send("Update not possible");
            });
    });
});


app.use('/playerDB', playerRoutes);


app.use(async (req, res, next) => {
    if (req.headers["x-access-token"]) {
        try {
            const accessToken = req.headers["x-access-token"];
            const { userId, exp } = await jwt.verify(accessToken, JWT_SECRET);
            // If token has expired
            if (exp < Date.now().valueOf() / 1000) {
                return res.status(401).json({
                    error: "JWT token has expired, please login to obtain a new one"
                });
            }
            res.locals.loggedInUser = await User.findById(userId);
            next();
        } catch (error) {
            next(error);
        }
    } else {
        next();
    }


});


app.use('/users', user_routes);


app.listen(PORT, function () {
    console.log("Server is running on Port: " + PORT);
});

我在 .env 文件中有我的 jwt 秘密值。必须将它放在变量中的主文件本身中,因为 require("dotenv") 行根本不起作用。节点模块中有相关包。