Avvio di learn node.js e backbone.js e sto utilizzando l'esempio TodoMVC come guida. Ci sono un paio di parti che ho problemi a sistemarmi la testa. Vedi sotto.Informazioni su TodoMVC Esempio
Qui è app.js.
var express = require('express')
, http = require('http')
, mongoose = require('mongoose')
, models = require('./models')
, routes = require('./routes')
, app = express();
app.configure(function() {
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(require('stylus').middleware({ src: __dirname + '/public' }));
app.use(express.static(__dirname + '/public'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
});
app.configure('development', function() {
app.use(express.errorHandler());
});
routes.init(app);
mongoose.connect("127.0.0.1", "todomvc", 27017);
http.createServer(app).listen(3000);
console.log("Express server listening on port 3000");
Heres è ./models:
var mongoose = require('mongoose'),
TodoSchema = new mongoose.Schema({
title: { 'type': String, 'default': 'empty todo...' },
order: { 'type': Number },
done: { 'type': Boolean, 'default': false }
});
module.exports = mongoose.model('Todo', TodoSchema);
Andy finalmente, qui è ./routes:
(function (exports) {
"use strict";
var mongoose = require('mongoose')
, crudUtils = require('../utils/crudUtils')
, Todo = mongoose.model('Todo');
function index(req, res) {
res.render('index', { 'title': 'Backbone.js, Node.js, MongoDB Todos' });
}
exports.init = function (app) {
app.get('/', index);
crudUtils.initRoutesForModel({ 'app': app, 'model': Todo });
};
}(exports));
Quindi la mia domanda è, come è il modello 'Todo' in mangusta .model ('Todo') nel modulo rotte disponibile in questo ambito? Vedo che il modulo dei modelli sta esportando mongoose.model ('Todo', TodoSchema); quindi devo credere che sia il modo in cui il modulo dei percorsi ha accesso ad esso, ma non so perché. Cosa mi manca? Ho la sensazione che non sia una completa comprensione dell'ambito in questa situazione. Inoltre, non sono sicuro del motivo per cui le rotte funzionano in modo anonimo.
Grazie mille!
Grazie mille! Questo chiarisce molto. Tuttavia, se commento "module.exports = mongoose.model ('Todo', TodoSchema);' nei model.js, l'app non funziona dicendo "Lo schema non è stato registrato per il modello 'Todo'." Potrebbe essere necessario che lo schema sia disponibile per le future esigenze di mangusta? –
Ci scusiamo, per essere più chiari, è necessaria la parte 'mongoose.model ('Todo', TodoSchema ')'. Questo è il bit che registra il modello con mangusta e lo rende successivamente disponibile. Intendevo dire che puoi saltare la parte 'module.exports =', dal momento che non stai usando ciò che stai esportando. Inoltre, dovresti usare 'exports.todoModel = ...' se vuoi aggiungere altri modelli a quel file .js ed esportarli tutti, vedi http://stackoverflow.com/questions/5311334/what-is -il-scopo-di-nodejs-module-exports-and-how-do-you-use-it/12907839 # 12907839 per ulteriori informazioni sull'esportazione dai moduli. –
Ottimo! Grazie per la tua risposta! Questo chiarisce molto. –