- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
开始学习 node.js 和 backbone.js 并使用 TodoMVC 示例作为我的指南。有几个部分我无法理解。见下文。
这是 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");
这是 ./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 最后,这是 ./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));
所以我的问题是,路由模块中 mongoose.model('Todo') 中的 'Todo' 模型在此范围内如何可用?我看到模型模块正在导出 mongoose.model('Todo', TodoSchema);所以我不得不相信这是路由模块访问它的方式,但我不知道为什么。我错过了什么?我有一种感觉,它只是不完全了解这种情况下的范围。另外,我不确定让路由功能匿名的原因。
非常感谢!
最佳答案
这是开始使用 Node 和 Mongoose 时要处理的比较困惑的事情之一。
当你require('mongoose')
第一次,它创建了一个 singleton Mongoose 的实例 - 每次您需要它时都会返回相同的实例。
这使得它真的很容易使用,但有点“神奇”,一开始很难理解。
这意味着当你调用mongoose.connect("127.0.0.1", "todomvc", 27017);
在 app.js 中,它创建了一个持续存在于应用程序中的连接。
这也意味着mongoose.model('Todo', TodoSchema);
使 Todo 模型在任何其他调用 require('mongoose')
的范围内可用, 通过 mongoose.model('Todo')
.这可以在另一个文件的顶部进行 var'd require
如上例所示,或者您在回调过程中需要它的那一刻。
这就是将 Todo 模型放入 routes.js 的方式,这是确保将模型告知 Mongoose 是您在应用程序中要做的第一件事的一个很好的理由。
回答您关于理解范围的问题;每个文件你require
实际上有它自己的范围,并且除了像进程这样的全局对象之外不能访问任何东西。你必须require
您想要使用的所有内容,并且只能通过调用函数或创建通过 exports
公开的类来传递变量对象。
因此对于上面的实际示例,从 models.js 导出模型没有任何好处,因为它随后不会在需要 models.js 的应用程序中引用。正是 routes.js 中的这些行使 Todo 模型可用:
var mongoose = require('mongoose')
, Todo = mongoose.model('Todo'); // returns the Todo model that was registered by models.js
这就是 Todo 在这条线上的存在方式:
crudUtils.initRoutesForModel({ 'app': app, 'model': Todo });
将路由包装在匿名函数中也没有任何好处(据我所知),因为这实际上是由 require
提供的.
关于javascript - 了解 TodoMVC 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13041777/
开始学习 node.js 和 backbone.js 并使用 TodoMVC 示例作为我的指南。有几个部分我无法理解。见下文。 这是 app.js。 var express = require('ex
我一直在研究 Todo MVC App for Ember 。在模型中,我注意到对包含在 Ember.run.once 中的 commit() 方法的调用请参阅:https://github.com/
调查redux todomvc ,仍然对 connect 和 mapStateToProps 感到困惑. todomvc/src/containers/App.js 部分代码为: const ma
调查 todomvc backbone codes example .js/fold 中的结构: ├── app.js ├── collections │ └── todos.js ├── mod
我想知道为什么在 TodoMVC Backbone Marionette , Marionette.Layout 用于 Footer而不是像 Header 这样的简单 ItemView? 还有为什么要
我正在尝试使用 Durandal 构建待办事项应用程序的一个版本(包括 Knockout + RequireJS )来自 TodoMVC template .我意识到待办事项应用程序并没有真正展示 D
我正在尝试遵循 emberjs 入门文档上的 todomvc 教程来更好地理解它。在本教程的下一阶段,我们将编辑功能添加到待办事项中。 在以下链接中:http://emberjs.com/guides
这更像是一个关于学习 Polymer 1.0 的一般性问题,它被提出了 by the polymer team在 stackoverflow 上发布它们。 我个人学习东西的最佳方式是重新构建小应用程序
首先,对于版主来说,如果这不是发布此内容的正确位置,请不要生气:)。 我想知道是否有类似 TodoMVC 的东西适用于 Django、Rails、Symfony 等流行的 Web 框架。 如果没有这样
我很难获得在 BackboneJS 中工作的具有自动递增“顺序”属性的模型。 出于某种原因,每个订单都设置为 1。 nextOrder 函数中集合的长度始终为 0。 Options = _.exten
在 TodoStore.js 的第 107 行: /** * @param {function} callback */ addChangeListener: function(
我正在遵循 emberjs 的入门指南,并且可以添加待办事项。我的问题是,当我添加一个 todo 时,它的 id 值为 null - 有没有一种实用的方法来自动增加它? var TodosContro
我正在浏览 Backbone教程并浏览 source代码我不明白双击事件 (todo-view.js),它导致编辑方法,导致元素获取类“编辑”使元素(输入)可编辑。 最佳答案 这实际上是一个 CSS
我在 TodoMVC 示例的 index.html 中找到了以下代码行: 有人知道这个数据元素是用来做什么的吗? 最佳答案 它与 TodoMVC 的依赖关系无关。此属性的唯一目的是允许在侧面板中附加
我正在通过此处的示例 todomvc 应用程序学习 Backbone.js: http://todomvc.com/architecture-examples/backbone/ 我有点陷入了 app
我正在构建我的第一个 backbone.marionette 应用程序,但有些事情让我感到困惑。 在 TodoMVC 的 backbone.marionette 版本中似乎有两个不同的模块执行应用程序
我在检查从服务器下载 JavaScript 文件的请求是什么样子时发现了不同之处。我只是想看看链接在 HTML 中的样子,但是当我检查检查器时,我找不到任何对任何 JavaScript 的引用。当我检
我是一名优秀的程序员,十分优秀!