J'écris cette mini application RESTful qui prend des demandes à différentes URL. Pour cela, j'utilise nodejs, et j'exprime pour configurer les différents chemins. En tant que base de données, je prévois d'utiliser monogoDB (le node-mongodb-native de christkv).Application NodeJS avec express et mongoDB
Mon code (qui ne comprend pas les tentatives de mongo) ressemble à ceci:
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);
et pour le bien de garder différents composants dans des fichiers différents, ceci est mon fichier le code pour chaque 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");
};
d'après ce que je vu dans certains exemples de codes que j'ai été vérifier, je ne devrais vraiment utiliser une seule connexion ouverte, qui est que je devrais avoir tout mon code dans le
client.open(function(err, pClient) {
});
appel. Le problème que je rencontre est que je ne sais pas comment passer le client ou la collection pour pouvoir travailler avec la base de données du fichier index.js. Y a-t-il un moyen de le faire dans la mise en page actuelle ou dois-je déplacer certaines choses?
Pourquoi devrait-on encapsuler des routes dans le rappel client.open? Dois-je faire cela si j'utilise mongoskin aussi? – georgesamper
Eh bien, vous le feriez si vous voulez que mongoClient soit facilement accessible dans les routes/contrôleur. Vous n'avez pas besoin de faire cela, c'est une question de préférence. – alessioalex
Oh je vois. Merci :) – georgesamper