想要了解NodeJS应用程序结构(完整JavaScript堆栈)
我想知道一个典型的NodeJS应用程序的结构,因为我阅读和看到的项目越多,我就越困惑,专门针对如下问题这些:(甚至更多的时候我更新了这个问题)想要了解NodeJS应用程序结构(完整JavaScript堆栈)
取均值叠加例如,据我所知,的NodeJS和快递都在服务器的护理
部分,提供了服务器接口等。MongoDB和Angular非常简单。但是业务逻辑去哪里?假如我有一个包含函数的controller.js,
和route.js文件将请求与此控制器函数绑定在一起。 我的问题是 哪个模块这些文件属于下下/运行(捷运或的NodeJS?)哪里是一个应用程序的NodeJS的起点?说index.php是一个PHP应用程序的起点, ,但NodeJS应用程序在哪里?我可以看到所有nodejs项目都有一个名为server.js或 app.js等的文件(包含类似
module.exports = app;
)但是NodeJS如何知道哪个文件 可以找到并执行它?
我是一个的NodeJS新鲜菜鸟,快递,sequelize.js /猫鼬,玉/ EJS但想获得一个项目的NodeJS开始。请大家详细说明每个模块提供的实际功能,以及完整的js堆叠nodejs应用程序的典型结构的一般介绍?提前致谢!
回答:
好的,这是一个相当广泛的问题,我绝对不是专家,但我会尽我所能。
TL; DR
routes
是控制器,告诉当用户浏览他们的浏览器到视图渲染和发送给那些哪些数据您的应用程序中的某个路径,包括要执行什么逻辑意见models
是 - 数据模型应用程序module.exports =
讲述了一个文件中到底是什么“出口”,这是需要什么样的代码被执行,或从主应用程序文件的访问。require(..)
包括一个模块。您可以将其设置为一个变量,以便稍后可以调用模块函数,或者只需执行一个函数(如果这些函数全部返回module.exports
)。
结合这些技术可以帮助您确定任何应用程序的实体框架。
长的答案
Express提供了组织你的Node.js应用程式一个坚实的框架。 Node完全独立于Express,但由于Express的普及程度,他们几乎齐头并进。一旦安装,Express可用于生成脚手架Web项目(带有选项),供您根据需要进行构建。
控制器
生成的项目将创造/routes/index.js
,它(如果你理解MVC)本质上是你的主要控制器。快递路由被写成这样:
app.get('/path', function(req, res, next){ .. });
让我们打破下来:我们的应用程序变量(APP)被告知,一个GET请求来'/path'
与req, res, next
变量(请求,响应执行一个匿名的回调函数,分别回调)。我觉得这很像自定义事件处理程序。
此时需要注意的一点是,我们也可以使用相同的语法来调用app.post
,以便将帖子发布到URL而不是获取。
在我们的匿名回调中,我们处理所有传入数据并呈现用户视图。这是我的大部分商业逻辑最终的地方,所以在这里不使用匿名函数是有道理的。下面是只显示一个主页的基本回调的例子:
app.get('/', function(req, res, next){ //some business logic
res.render('views/home');
});
当用户试图让我们的应用程序(/
)的索引路径,我们只是使我们的home
认为,从我们项目的根目录存储在views
文件夹中。
但是,如果我们要模块化,以便我们不在我们的主app.js
或server.js
中声明所有路线,该怎么办?
我们在我们的模块中使用module.exports = ..
来告诉我们的服务器究竟包含什么。在我的控制,我导出一个函数,它的应用作为参数,并使用它来定义我们的路线,像这样:
控制器/ user.js的
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
模型的例子:
型号/用户。JS
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
包括用户控制器,你可以这样写:require('./Controllers/User')
。由于我们的控制器模块简单地导出函数,我们可以在我们的require语句后立即调用该函数,只需在最后加上括号(无论需要什么参数)。包括我的控制器看起来像这样:
require('./Controllers/User')(app)
我通过在实际的应用程序,因为我的模块(如下图)简单地导出功能,增加了业务逻辑,以我的应用程序的途径。这只需要被调用并且从不使用,所以我不会捕获我的控制器作为变量来稍后调用方法。
包括模型有点不同,因为我们可能想要执行我们的模型定义的一些操作。我们可以通过改变我们的需要的代码只是有点做到这一点:
var User = require('./Models/User');
现在我们可以拨打我们的用户模型时的方法。猫鼬为我们提供了一个免费的很多基本功能:
User.find({}, function(err, users){ .. });
上述功能会发现我们所有的用户,然后执行一个匿名函数潜在err
(为空,如果没有任何问题),然后JSON格式的用户列表。相当漂亮。
结合所有这些概念,您将如何使用Express和Node.js创建基本Web应用程序。请在评论中告诉我是否有任何可以说明我如何使用Express的内容。这是表面层面的知识,我建议深入研究文档并查看插件以扩展应用程序的功能。祝你好运!
以上是 想要了解NodeJS应用程序结构(完整JavaScript堆栈) 的全部内容, 来源链接: utcz.com/qa/263075.html