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

时间:2019-10-20 12:56:19

标签: node.js mongodb express axios mern

如何在NodeJS ExpressJS后端项目中实例化,配置和使用多个不同的MongoDB数据库名称?我想MongoDB中没有“表”的概念。我正在使用数据库“ playerDB”,并很好地用于添加,获取数据等。现在在我的项目中,我还希望拥有用户登录和[具有角色]注册的概念,因此需要新的数据库“ userDB”

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

是什么?我该怎么办?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

这就是我基本上实现它的方式。就像我提到的那样,我不得不更改与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%$6";


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”) 行根本不起作用,因此必须将其放入主文件本身。相关程序包位于节点模块中。