Конфигурирование нескольких баз данных в NodeJS & MongoDB Backend - - PullRequest
0 голосов
/ 20 октября 2019

Как создать, настроить и использовать несколько разных имен баз данных MongoDB в бэкэнд-проекте NodeJS ExpressJS? Я полагаю, что в MongoDB нет понятия «таблицы». Я использую базу данных 'playerDB' и хорошо ее использую для добавления, извлечения данных и т. Д. Теперь в моем проекте я также хочу иметь концепцию входа пользователя в систему и регистрации [с ролями] и, следовательно, необходимость новой базы данных 'userDB'.

Как мне это сделать? Это вообще допустимо или допустимо в домене Node Express Mongo? Как должна быть структура проекта? Пишу ли я все соединения и связанные с ним файлы в одном файле server.js или в разных таких файлах?

Что это? Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

Так вот как я в основном достиг этого. Как я уже упоминал, мне пришлось изменить некоторые части, связанные с 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);
});

У меня было секретное значение jwt в a. файл env. Пришлось поместить его в основной файл внутри переменной, так как строка require ("dotenv") вообще не работает. Соответствующие пакеты есть в модулях узла.

0 голосов
/ 20 октября 2019

Вы можете использовать одну базу данных и несколько коллекций. Коллекции подобны таблицам в системах управления реляционными базами данных. Вы можете создать коллекцию с именем «users», затем использовать операции создания, обновления, удаления и выборки.

...