Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – 想清楚地了解NodeJS的应用程序结构(完全JavaScript堆栈)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道一个典型的NodeJS应用程序的结构,因为我阅读和看到的项目越多,我越困惑,特别是这样的问题:(或更多的时候,我更新这个问题。)

>以MEAN堆栈为例,从我所知道的,NodeJS和Express负责服务器
部分,提供服务器接口等。MongoDB和Angular是相当简单。

但是业务逻辑应该在哪里?说如果我有一个controller.js包含一个函数
并且route.js文件使用此控制器函数绑定请求。我的问题是
这些文件属于/运行在哪个模块(Express或NodeJS?)
> NodeJS应用的起点在哪里?说index.PHPPHP应用程序的起点,
它在哪里是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为我们提供了一个伟大的编写模型的接口。使用猫鼬,编写模型是一个三步过程:

>定义模式
>定义模型逻辑
>生成和导出模型

以下是用户模型的示例:

@H_662_5@models / User.js

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,请注明来意。