Ivan-P
@Ivan-P

Как в Express разбить роуты по файлам и передавать им соединение с MongoDB?

Сейчас все приложение в одном файле, но он сильно разросся, решил разбить его на куски.
Вот что получается:

index.js
// BASE SETUP
// =============================================================================
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const cors = require('cors');
const db = require('./app/db');

// configure app to use bodyParser()
// this will let us get the data from a POST
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.use(express.static('public'));
app.use(cors());

app.set('port', (process.env.PORT || 3000));

// ROUTES FOR OUR API
// =============================================================================
/*const router = express.Router(); // get an instance of the express Router*/
const router = require('./app/router'); // get an instance of the express Router

app.use('/', router);

// Connect to Mongo on start
db.connect(mlabUrl, function(err) {
    if (err) {
        console.log('Unable to connect to Mongo.')
        process.exit(1)
    } else {
        app.listen(app.get('port'), function () {
            console.log('Node app is running on port', app.get('port'));
        });
    }
});


db.js
let MongoClient = require('mongodb').MongoClient;

let state = {
    db: null,
};

exports.connect = function (url, callback) {
    if (state.db) {
        return callback();
    }

    MongoClient.connect(url, function (err, db) {
       if (err) {
           return callback(err);
       }

       state.db = db;
        callback();
    });

}


exports.get = function () {
    return state.db;
};


exports.close = function (callback) {
    if(state.db) {
        state.db.close(function(err, res) {
            state.db = null;
            state.mode = null;
            callback(err);
        })
    }
};


router.js
const express = require('express');
const router = express.Router();
const ObjectID = require('mongodb').ObjectID;

let db = require('./db');

router.get('/items', (req, res) => {
  db.collection('items').find().toArray((err, results) => {
    res.send(results);
  });
});

...и тут много роутов


Хотел разбить роуты по файлам а коннект к базе сделать при запуске приложения, но что-то идет не так - получаю 500 'TypeError: db.collection is not a function'
  • Вопрос задан
  • 540 просмотров
Пригласить эксперта
Ответы на вопрос 1
@LiguidCool
Что вообще БД забыла в роутах?
А по теме - создаете папку с роутами, там индексный файл, который грузит платы из папки.
Но я вам настоятельно рекомендую почитать гайды по ноде и по MVC в целом.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы