Добрый день,Node.js Экспресс маршрутизации с MongoDB
Я недавно начал работать с Node.js + экспресс + MongoDB. Я создал простое приложение, содержащее:
/**
* Module dependencies.
*/
var express = require('express')
, routes = require('./routes')
, mongoose = require('mongoose')
, models = require('./models')
, Document
, db;
// lots of conf ...
models.defineModels(mongoose, function() {
app.Document = Document = mongoose.model('Document');
db = mongoose.connect(app.set('db-uri'));
})
// Routes
app.get('/', routes.home);
app.get('/documents.:format?', routes.list);
// classical end of app.js
У меня также есть соответствующий файл «index.js» внутри папки «маршруты», содержащий:
exports.home = function(req, res){
res.render('index', { title: 'Indx' })
};
exports.list = function(req, res){
Document.find().all(function(documents) {
switch (req.params.format) {
case 'json':
res.send(documents.map(function(d) {
return d.__doc;
}));
break;
default:
res.render('index', { title: 'Indx' });
}
});
};
Служба маршрутизации часть OK, смысл что, когда я указываю свой браузер на localhost: 3000, я вижу (сгенерированный Jade-шаблон) «индекс». Когда я указываю на localhost: 3000/documents, маршрутизация работает нормально, а код пытается обслуживать часть «списка» моего маршрута «index.js». Тем не менее, я надеялся, что модель мангуст «Документ» Я создал в основном приложение будет признана в «index.js», но это явно не так, как я получаю следующее сообщение об ошибке:
Express
500 ReferenceError: Document is not defined
at C:\PERSO\DEV\indxjs\routes\index.js:23:2
at callbacks (C:\PERSO\DEV\indxjs\node_modules\express\lib\router\index.js:272:11)
at param (C:\PERSO\DEV\indxjs\node_modules\express\lib\router\index.js:246:11)
at param (C:\PERSO\DEV\indxjs\node_modules\express\lib\router\index.js:243:11)
at pass (C:\PERSO\DEV\indxjs\node_modules\express\lib\router\index.js:253:5)
at Router._dispatch (C:\PERSO\DEV\indxjs\node_modules\express\lib\router\index.js:280:4)
at Object.handle (C:\PERSO\DEV\indxjs\node_modules\express\lib\router\index.js:45:10)
at next (C:\PERSO\DEV\indxjs\node_modules\express\node_modules\connect\lib\http.js:204:15)
at Object.methodOverride [as handle] (C:\PERSO\DEV\indxjs\node_modules\express\node_modules\connect\lib\middleware\methodOverride.js:35:5)
at next (C:\PERSO\DEV\indxjs\node_modules\express\node_modules\connect\lib\http.js:204:15)
Я мог бы, очевидно, определить свой маршрут изнутри «app.js» с чем-то вроде:
app.get('/documents.:format?', loadUser, function(req, res) {
// ...
}
Но кто может увидеть способ говорить с мангустом, сохраняя при этом разделение элегантного»./routes/index.js' от «app.js»?
Большое спасибо
EDIT: следующий вид ответа от Уэса, я добавил следующий код «index.js»:
var Document;
function defineRoutes(mongoose, fn) {
Document = mongoose.model('Document');
fn();
}
exports.defineRoutes = defineRoutes;
// then the same as in initial post
И я прилагается определения маршрутизации внутри этой функции в «приложении .js':
routes.defineRoutes(mongoose, function() {
app.get('/', routes.home);
app.get('/documents.:format?', routes.list);
})
Все нормально, когда я указываю на локальном хосте: 3000, но когда я указываю/документов, браузер поддерживает загрузку, загрузка ...
Пожалуйста, подумайте об этом, отвечая, если он решит вашу проблему. – rcdmk