大佬教程收集整理的这篇文章主要介绍了node.js – 想清楚地了解NodeJS的应用程序结构(完全JavaScript堆栈),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
>以MEAN堆栈为例,从我所知道的,NodeJS和Express负责服务器
部分,提供服务器接口等。MongoDB和Angular是相当简单。
但是业务逻辑应该在哪里?说如果我有一个controller.js包含一个函数,
并且route.js文件使用此控制器函数绑定请求。我的问题是
这些文件属于/运行在哪个模块(Express或NodeJS?)
> NodeJS应用的起点在哪里?说index.PHP是PHP应用程序的起点,
但它在哪里是NodeJS应用程序?我可以看到所有的nodejs项目都有一个名为server.js的文件
app.js等(包含类似module.exports = app;)但是NodeJS如何知道哪个文件
找到并执行它?
我是一个新鲜的noob上NodeJS,express,sequelize.js / mongoose,jade / ejs,但想要开始一个nodejs项目。你能请你详细说明每个模块提供的实际功能和一个完整的js堆叠nodejs应用程序的典型结构的一般介绍?提前致谢!
TL; DR
>路由是当用户将其浏览器导航到应用程序中的某个路径(包括要呈现的视图和要发送到这些视图的数据)时,告诉要执行什么逻辑的控制器
>模型就是你的应用程序中的数据模型
> module.exports =告诉文件它究竟是什么“exports”,这就是什么代码需要执行或从您的主要应用程序文件访问。
> require(..)包括一个模块。你可以在一个变量上设置它,这样你可以稍后调用模块函数,或者简单地执行一个函数,如果那是module.exports返回。
结合这些技术可以帮助您为任何应用程序打下坚实的框架。
长答案
Express为构建您的Node.js应用程序提供了一个坚实的框架。 Node完全独立于Express,但是因为流行的Express是如何流行的。一旦安装,Express可以用来生成一个scaffold web项目(有选项),你可以在上面构建,如果你愿意。
控制器
生成的项目将创建/routes/index.js,它(如果你理解MVC)本质上是你的主控制器。快车路线如下:
app.get('/path',function(req,res,next){ .. } );
让我们断言:@R_137_9616@程序变量(应用程序)被告知,在GET请求’/路径’执行一个匿名回调函数与req,res,下一个变量(请求,响应,回调分别)。我觉得这有点像自定义事件处理程序。
在这一点上很重要的一点是,我们也可以使用相同的语法将app.post调用到URL而不是gets。
在我们的匿名回调中,我们处理任何传入的数据并为用户呈现视图。这是我的大部分业务逻辑结果,所以在这里不使用匿名函数实际上是有意义的。下面是一个只显示首页的基本回调示例:
app.get('/',next){ //some business logic res.render('views/home'); });
当用户尝试获取@R_137_9616@程序(/)的索引路径时,我们只需渲染我们的主视图,从我们项目的根目录存储在views文件夹中。
但是如果我们想要模块化这样,所以我们不在我们的主app.js或server.js中声明所有的路由呢?
我们在我们的模块中使用module.exports = ..告诉我们的服务器究竟要包含什么。在我的控制器中,我导出一个单独的函数,将应用程序作为参数,并使用它来定义我们的路由,如:
Controllers / User.js
@H_132_42@module.exports = function(app){ app.get('/users',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代码,我将数据库附加到我的应用程序中的请求,但这是不是默认完成。简单地了解,我在这里得到一个“用户”的列表,并将用户重定向到我的应用程序的索引,如果没有任何。
楷模
@H_662_5@mongoose为我们提供了一个伟大的编写模型的接口。使用猫鼬,编写模型是一个三步过程:>定义模式
>定义模型逻辑
>生成和导出模型
var mongoose = require('mongoose'),userscheR_146_11845@a = new mongoose.scheR_146_11845@a({ name: { type: String,required: true },joinDate: {type: Date,default: date.Now } }),User = mongoose.model('user',userscheR_146_11845@a); module.exports = user;
服务器应用程序
@H_662_5@module.exports用于帮助我们为我们的代码库定义一些模块化。当我们运行一个节点应用程序时,我们最终运行一个单独的JavaScript文件(你已经看到这个文件与server.js或app.js)。为了防止这个文件对于多个模型和路由过大,我们使用require(modulE)包含来自其他JS文件的代码。模块在我们的例子中将是我们想要的模块的路径。如果您有以下文档结构:
| Controllers - User.js | Models - User.js | Views app.js
要包括来自app.js的用户控制器,你应该写:require(‘./ Controllers / User’)。因为我们的控制器模块只是导出函数,我们可以在我们的require语句之后立即调用该函数,只需在末尾添加括号(无需任何参数)。包括我的控制器看起来像这样:
require(‘./ Controllers / User’)(app)
我传入实际的应用程序,因为我的模块(下面)只是导出一个函数,添加业务逻辑到我的应用程序的路由。这只需要被调用而从不使用,所以我不捕获我的控制器作为变量调用方法在以后。
包括模型有点不同,因为我们可能想要执行我们的模型定义的一些操作。我们可以通过更改我们的require代码只是一点:
var User = require(‘./ Models / User’);
现在我们可以每当调用我们的User模型的方法。 Mongoose为我们提供了许多免费的基本功能:
User.find({},function(err,users){..});
上面的函数将找到我们所有的用户,然后执行一个匿名函数与一个潜在的错误(如果没有问题的null),然后一个列表的JSON格式的我们的用户。漂亮漂亮。
组合所有这些概念是如何使用Express和Node.js创建基本的Web应用程序。请让我知道在评论如果有什么我可以澄清如何使用快递。这是非常表面层的知识,我建议挖掘文档和查看插件,以扩展您的应用程序的功能。祝你好运!
以上是大佬教程为你收集整理的node.js – 想清楚地了解NodeJS的应用程序结构(完全JavaScript堆栈)全部内容,希望文章能够帮你解决node.js – 想清楚地了解NodeJS的应用程序结构(完全JavaScript堆栈)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。