Очистить MongoDB / Node.js / Express код и маршруты - PullRequest
0 голосов
/ 28 января 2020

Я начал изучать базу данных с MongoDB и Node.js не долго go, и я пытаюсь найти способ использовать Express маршруты без мес goose. Я хочу вставить данные, используя Express маршруты и чистый код, экспортирующий различные модули. Проблема в том, что я не могу написать маршруты, как показано ниже, потому что в моем индексе. js файл "db", конечно, не определен, и, очевидно, я не могу вставить данные в мой "db" вне функции "client.connect". "как с пн goose. Должен ли я связать свою базу данных в файле со всеми своими сообщениями, или есть определенный способ c? (извините за мой Engli sh, я его изучаю).

Приложение. js:

const express = require('express');
const app = express();
const expressLayouts = require('express-ejs-layouts');
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');

//EJS
app.use(expressLayouts);
app.set('view engine', 'ejs');

//Styles
app.use('/public', express.static('public'));

//Bodyparser
app.use(express.urlencoded({extended: false}));


//Connect to DB
const url = 'mongodb://localhost:27017/shopping'
const dbName = 'shopping';
const client = new MongoClient(url);

client.connect((err)=>{
    assert.equal(null, err);
    console.log('connected to db...');

    app.use('/', require('./routes/index'));    

    const db = client.db(dbName);
});

//Server
app.listen(3000, ()=>{console.log("Listening to port 3000")});

index. js (маршруты):

const express = require('express');
const router = express.Router();

//Get home page
router.get('/', (req, res)=>{
    res.render('shop/index')
});

router.get('/posts', (req,res)=>{
    res.render('posts')
});

router.post('/posts',(req,res)=>{
    db.collection('users').insertOne({'name': req.name, 'password': req.password});
});

module.exports = router;

1 Ответ

0 голосов
/ 29 января 2020

Индекс. js должен включать в себя функцию, с помощью которой можно передать вашего клиента mon go. Так, например:

let mongoClient
router.passMongoClient = function(clientIn){
   mongoClient = clientIn
}

Затем, после того как вы запустили свой клиент, пропустите его через Ваша новая функция

const router = require(./router)

client.connect((err)=>{
    assert.equal(null, err);
    console.log('connected to db...');

    app.use('/', require('./routes/index'));    
    const db = client.db(dbName);
    router.passMongoClient(db)
});

Это базовая c идея. Вы можете sh структурировать свой код немного по-другому. Я жду, чтобы запустить свой http-сервер, пока не получу обратный вызов от подключенного клиента mongodb. Зависит от вашего варианта использования в определенной степени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...