最佳答案
好的,这是一个相当广泛的问题,我绝对不是专家,但我会尽力而为。
TL; DR
routes
是 Controller ,它们告诉用户当用户将其浏览器导航到您应用内的特定路径时要执行什么逻辑,包括要呈现哪些 View 以及向这些 View 发送哪些数据models
就是这样-应用程序中的数据模型module.exports =
告诉文件“导出”的确切内容,即需要从主应用程序文件执行或访问的代码。 require(..)
包含一个模块。您可以在变量上设置它,以便稍后可以调用模块函数,或者如果module.exports
返回的只是所有函数,则只需执行一个函数即可。 /routes/index.js
,它(如果您了解MVC)实际上是您的主 Controller 。 Express中的路线是这样写的:app.get('/path', function(req, res, next){ .. } );
'/path'
的GET请求上执行带有req, res, next
变量的匿名回调函数(分别是请求,响应和回调)。我发现将其视为自定义事件处理程序很有帮助。app.post
。app.get('/', function(req, res, next){
//some business logic
res.render('views/home');
});
/
)时,我们仅呈现home
View ,该 View 从项目的根目录存储在views
文件夹中。app.js
或server.js
中声明所有路线,该怎么办?module.exports = ..
来告诉我们的服务器确切包含什么。在我的 Controller 中,我导出了一个函数,该函数将应用程序作为参数,并使用该函数来定义我们的路由,如下所示: module.exports = function(app){
app.get('/users', function(req, res){
var users = req.db.collection('users').find();
if (!users) {
console.log("no users found");
res.redirect('/');
} else {
res.render('users/index', {users : users});
}
});
};
req.db
代码,我将数据库附加到应用程序中的请求上,但是默认情况下不会这样做。只需了解我会在此处获得“用户”列表,然后将用户重定向到我的应用程序索引(如果没有)。User
模型的示例:var mongoose = require('mongoose'),
userSchema = new mongoose.Schema({
name: { type: String, required: true },
joinDate: {type: Date, default: date.now }
}),
User = mongoose.model('user', userSchema);
module.exports = user;
module.exports
用于帮助我们为代码库定义一些模块化。当我们运行一个节点应用程序时,我们最终将运行一个JavaScript文件(您已经使用server.js
或app.js
看到了该文件)。require(module)
包含其他JS文件中的代码。在我们的情况下,module
将是我们想要的模块的路径。如果您具有以下文档结构:| Controllers
- User.js
| Models
- User.js
| Views
app.js
app.js
中的用户 Controller ,您应该编写:require('./Controllers/User')
。由于我们的 Controller 模块只是导出函数,因此我们可以在require语句后立即调用该函数,只需在其末尾添加括号即可(带有所需的任何参数)。包括我的 Controller 如下所示:require('./Controllers/User')(app)
var User = require('./Models/User');
User.find({}, function(err, users){ .. });
err
的匿名函数(如果没有问题,则为null),然后执行JSON格式的用户列表。很漂亮https://stackoverflow.com/questions/21831119/
相关文章:
node.js - 如何获取 `app.all()` 中的请求方法类型?
node.js - 使用 Intellij 调试 grunt
mongodb - Mongodb聚合中的求和数组元素
javascript - "Mongoose mpromise is deprecated"
node.js - Sequelize,实例化后如何更改值?
node.js - 你能用jade只渲染你的html的动态部分...而不弄乱你的html的其余部分吗
javascript - 路由内的 Express.js http 调用不更新变量
node.js - angular 可以在 Jade 模板中使用吗?
node.js - 如何在 Feathersjs 身份验证中创建自定义 HashPassword 函数
MongoDB 建议请求