Приложение NodeJS с экспресс-и mongoDB - PullRequest
1 голос
/ 15 декабря 2011

Я пишу это мини-приложение RESTful, которое принимает запросы на разные URL-адреса.Для этого я использую nodejs и Express для настройки различных путей.В качестве базы данных я планирую использовать monogoDB (node-mongodb-native by christkv).

Мой код (не включающий попытки монго) выглядит следующим образом:

app.js

/**
 * Module dependencies.
 */
var express = require('express')
    , routes = require('./routes')
var app = module.exports = express.createServer();

var Db = require('mongodb').Db;
var Server = require('mongodb').Server;
var client = new Db('test', new Server('127.0.0.1', 27017, {}));    

// Configuration

app.configure(function() {
    app.set('views', __dirname + '/views');
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(app.router);
    app.use(express.static(__dirname + '/public'));
});

app.configure('development', function() {
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function() {
    app.use(express.errorHandler());
});

var insertData = function(err, collection) {
    collection.insert({name: "Kristiono Setyadi"});
    collection.insert({name: "Meghan Gill"});
    collection.insert({name: "Spiderman"});
}



// Routes
app.post('/', routes.syncServiceIndex);

app.post('/syncService', routes.synchServicePost);
app.get('/syncService/:syncServiceUser/sync', routes.synchServiceSync);
app.post('/syncService/:syncServiceUser/push', routes.synchServicePush);
app.del('/syncService/:syncServiceUser', routes.synchServiceDel);

app.post('/syncService/:syncServiceUser/contacts/push', routes.synchServiceContactsPush);
app.get('/syncService/:syncServiceUser/contacts/sync', routes.synchServiceContactsSync);

app.post('/syncService/:syncServiceUser/contacts/', routes.synchServiceContactsPost);
app.get('/syncService/:syncServiceUser/contacts/:contactId', routes.synchServiceContactsGet);
app.put('/syncService/:syncServiceUser/contacts/:contactId', routes.synchServiceContactsPut);
app.del('/syncService/:syncServiceUser/contacts/:contactId', routes.synchServiceContactsDel);

app.listen(3000);



console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);

и для хранения разных компонентов в разных файлах это мой файл с кодом для каждого URL:

index.js

//var ObjectID = db.bson_serializer.ObjectID;
exports.syncServiceIndex = function(req, res) {
    console.log('syncServiceIndex');
    //console.log("BODY:" + JSON.stringify(req.body));

    res.statusCode = 200;
    res.send("OK\n");
};

exports.synchServicePost = function(req, res) {
    console.log('synchServicePost');
    console.log("BODY:" + JSON.stringify(req.body));
    var jsonObject = JSON.parse(JSON.stringify(req.body));
    res.statusCode = 200;
    res.send("OK\n");
};

exports.synchServiceSync = function(req, res) {
    console.log('synchServiceSync');
    res.statusCode = 200;
    res.send("OK\n");
};

exports.synchServicePush = function(req, res) {
    console.log('synchServicePush');
    res.statusCode = 200;
    res.send("OK\n");
};

exports.synchServiceDel = function(req, res) {
    console.log('synchServiceDel');
    res.statusCode = 200;
    res.send("OK\n");
};

exports.synchServiceDel = function(req, res) {
    console.log('synchServiceDel');
    res.statusCode = 200;
    res.send("OK\n");
};

exports.synchServiceContactsPush = function(req, res) {
    console.log('synchServiceContactsPush');
    res.statusCode = 200;
    res.send("OK\n");
};

exports.synchServiceContactsSync = function(req, res) {
    console.log('synchServiceContactsSync');
    res.statusCode = 200;
    res.send("OK\n");
};

exports.synchServiceContactsPost = function(req, res) {
    console.log('synchServiceContactsPost');
    res.statusCode = 200;
    res.send("OK\n");
};

exports.synchServiceContactsGet = function(req, res) {
    console.log('synchServiceContactsGet');
    res.statusCode = 200;
    res.send("OK\n");
};

exports.synchServiceContactsPut = function(req, res) {
    console.log('synchServiceContactsPut');
    res.statusCode = 200;
    res.send("OK\n");
};

exports.synchServiceContactsDel = function(req, res) {
    console.log('synchServiceContactsDel');
    res.statusCode = 200;
    res.send("OK\n");
};

Из того, что я видел в некоторых примерах кодов, которые я проверял, я должен действительно использовать только одно открытое соединение, то есть у меня должен быть весь мой код в вызове

client.open(function(err, pClient) {

});

.Однако у меня проблема в том, что я не знаю, как передать клиент или коллекцию, чтобы я мог работать с базой данных из файла index.js.Есть ли способ, которым я могу сделать это в текущем макете, или мне нужно что-то переместить?

1 Ответ

1 голос
/ 15 декабря 2011

Вы можете заключить все ваши маршруты в обратный вызов и установить req.mongoClient = pClient в промежуточном программном обеспечении, например:

client.open(function(err, pClient) {
  clientMiddleware = function (req, res, next) {
    req.mongoClient = pClient;
    next();
  }
  // your routes here, with clientMiddleware
  app.post('/', clientMiddleware, routes.syncServiceIndex);
  app.post('/syncService', clientMiddleware, routes.synchServicePost);
  app.get('/syncService/:syncServiceUser/sync', clientMiddleware, routes.synchServiceSync);
  // etc.
});

Теперь вы можете получить клиента, используя req.mongoClient во всех маршрутах.

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