位置: 编程技术 - 正文

快速使用node.js进行web开发详解(快速使用流量)

编辑:rootadmin

推荐整理分享快速使用node.js进行web开发详解(快速使用流量),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:快速使用复制粘贴键手指应该怎么放,快速使用流量,快速使用抓手工具的快捷键,快速使用流量方法,快速使用指南,快速使用复制粘贴键手指应该怎么放,快速使用流量,快速使用流量,内容如对您有帮助,希望把文章链接给更多的朋友!

首先关于node.js的学习,这里推荐一本比较好的教程,nodejs web开发指南,该书通俗易懂地将node.js语言特性讲解完之后,又从一个项目角度带领读者使用node.js学习web开发。相信这是一个比较好的学习模式和过程。由于这本书是年出的,书中的一个web教学项目是开发一个微博。从到现在,node.js及其生态环境发生了很大改变,所以关于该书的学习如果照着书本显然是过于陈旧的。到目前为止,node.js的web开发框架已经升级到了Express4..1,对于MongoDB的操作更多是使用mongoose这个对象模型,而不是之前mongoDB 官方提供的原生node.js的API,所以本文将基于nodejsV0. + MongoDBV3.0.2+ Jade1.9.2 + mogooseV4.0.1来重构该书中的微博项目,这个组合也是目前最新的使用node.js进行web开发的常用组合之一,如果需要入门使用node.js进行web开发,正在学习nodejs web开发指南的和想快速了解node.js web开发模式的朋友,相信本文是有一定帮助意义的。

1.express框架安装

1)在node命令行模式下输入以下命令

该命令在全局环境下安装express框架,在安装完这一步之后,并不能直接使用express命令来生成express项目,需要再安装一个express项目生成器,在express2.X的版本中是不需要的,express4.X版本之后将项目生成器和express本身分离了出来,如果不安装express-generator这个生成器就使用express命令来生成项目,会遇到报express不是内部或外部命令这个错误,这是需要注意的地方,nodejs web开发指南原书中是没有安装express-generator这一步的。

2)安装express-generator

3)生成一个项目

这里随意在硬盘某个目录下创建一个microblog的文件夹,进入该文件夹,然后使用express microblog命令创建了一个microblog的express项目。

生成结构如下:

其中app.js是项目入口文件,package.json是npm 包管理文件,bin文件夹里面的www.js放一些全局配置项以及命令行配置等。public 文件夹是用来存放项目静态文件目录如js,css以及图片,routes文件夹是用来存放路由监听的代码相关文件。views文件夹用来存放模板文件,这里需要注意的是express4.X使用jade作为项目的默认模板引擎,而在原书中是使用ejs作为模板引擎的,所以这里默认生成的是jade文件。无可否认ejs是要简单些,但是原理都是一样的,我们使用jade作为开发的模板引擎。

4)启动项目并查看

进入到microblog文件夹,安装项目所需相关模块(根据pacakge.json文件),然后启动项目,这时候打开浏览器查看项目输入地址localhost:,结果如下说明一切正常,

到目前为止,我们已经拥有了一个在浏览器中运行的web项目雏形。下面进行开发,原书中的微博项目的主要功能是用户能够注册登录,权限控制并让用户发布微博在用户个人主页和项目首页分别显示,这些功能完整版代码会提供,由于篇幅原因,这里以用户注册登录模块来说明如何进行一个完整流程的web开发。

2.页面布局

依照web开发流程,我们首先来构建一个项目主页,项目主页是由布局文件layout.jade和内容文件index.jade组成,关于的jade的学习,这里提供两个地址,对于以前使用过类似模板引擎如smarty,razor等的,可以看看文档就能够上手做了,基本原理都是大同小异。

打开views文件,将layout.jade文件代码改写如下:

需要注意父级元素和子元素的换行之间缩进,jade是利用缩进来区别代码层级的。

首页内容文件index.jade

首页内容是继承了模板文件layout.jade.原书中使用的bootstrap来构建页面的css布局和样式,这里我自己手写了一个仿bootstrap风格的布局样式,没有应用bootstrap,style.css文件如下:

这个css文件是项目中所有的css全部包含在这里,所以比较庞大。到目前为止,可以查看首页效果如下:

首页中的数据都是之前自己测试过程中加入的,这里主要为了查看首页效果,可以忽略这些数据。

由于这里要演示用户注册登录模块,用户注册模块的模板文件reg.jade如下:

用户登陆模板login.jade如下:

最终用户注册效果如下:

快速使用node.js进行web开发详解(快速使用流量)

用户登录模块和这个效果相仿,就不查看了,少了一个重复密码的input而已。

下面我们需要编写用户注册的逻辑,在编写用户注册逻辑的前,用户数据需要持久化,所以首先要安装MongoDB数据库在自己的机器上.

MongoDB这种nosql类型的数据库,非常适合用户存储JSON对象类型的数据,有了mongoDB,就可以免去数据库表设计部分的工作,对比以前使用的mysql,sqlserver以及oracle还是非常方便的。关于mongoDB数据库的熟悉和学习,推荐其官网,官网详细介绍了该数据库的一切。英文不好可以去中文社区。同时为了使用nodejs来操作mongoDB数据库,我们使用mongoose这个对象模型,它是将mongoDB中的一个集合映射为nodejs中的一个model,然后在该model上提供操作这个集合的一些方法,使用它就可以避免我们自己利用nodejs提供的原生操作mongoDB数据库的语法去手写数据库CURD的方法,大大见晒了工作量,提高了开发效率。关于mongoose的学习,推荐去其官网,里面详述了它的安装,使用以及API调用情况。

解决了mongoDB安装和操作问题,我们来对数据库操作的model类,首先在项目路径下建立一个db.js文件,用来连接数据库并对数据库进行全局配置,如下

db.js

这里首先加载了配置文件settings.js文件,为了数据库便于灵活修改,我们将某些信息存储在配置文件中。然后加在了之前安装的mongoose模块,然后调用该模块的connect方法来连接我们配置的数据库,然后将连接以对象的形式返回供外部调用。

settings.js

MongoDB的默认端口是,一般可以使用默认端口即可,数据库连接大时候可以不指定端口,数据库名为microblog.

然后以db.js返回的数据库连接对象为基础,我们在项目根目录下创建一个models文件夹,用来存放数据模型。创建一个user.js映射我们数据库中的user集合(可以理解为user表),代码如下:

这里首先获得db.js中定义的连接对象,并以该对象为基础构造一个Schema(架构),mogoose操作数据库是以架构为基础的,类似于我们其他ORM模型中属性和方法的定义。这里我们定义了一个架构,拥有两个属性,name和password,都是string类型,对应用户的用户名和密码。然后利用该架构去创建一个model,该model上定义了对数据集合的增删改查等方法,不用我们自己再去定义和编写其他代码。在原书中这一节是利用node.js操作MongoDB数据库的原生API去定义了一个user对象,然后在user对象上自定义了一些CRUD的方法。可以看出,直接使用Mongoose可以大大减少开发量并且拥有更好的效率和性能。

到目前为止,我们已经有了界面(view),数据模型(model),就差逻辑代码(controller)没有编写了。在编写逻辑代码之前需要先说下express框架的特点以及它的整体运行方式。由于本人使用过一些类似的如Asp.net mvc,Yii以及thinkphp等MVC框架,使用express之后最大的感觉是这个框架够轻量级,尤其是express4.X之后,它仅仅保留了静态文件路径映射模块作为该框架本身的内置模块,其他的功能都以中间件的形式采用require(modulename)进行引入,只有引入后才能够使用该模块提供的功能。

express的工作原理是客户端发送一个request,express接到该请求,可以将它进行处理之后传递给其他中间件进行处理,最终处理完成之后,采用respond.end或者response.render进行页面渲染或响应,进行页面渲染的时候,采用参数传递页面需要的数据给对应模板引擎,模板引擎收到数据然后按照自己的语法进行替换生成对应的html,最终返回给浏览器进行渲染。

在express中,最关键的部分就是路有机制,我们所有基于请求做出的响应都是对该路由进行监听捕获的结果。举个例子,如果我们请求一个路径为 下安装,然后在项目主文件中使用require加载,最后调用其提供的API,为了使用session,必须先安装cookie的支持,这里利用cookie-parser这个中间件来为express框架提供cookie支持,它的具体使用方式可以去上面提供的地址自行查看。对于session,我们常见框架的做法是在服务器端将其存放到文件当中,由于这里我们有了MongoDB数据库,更理想的状态是将它存在数据库中,这样可以更灵活去控制。使用connect-mongo中间件可以将session存储到mongoDB中,具体使用方式可按地址查看。

上述概念明确之后,我们在项目根目录下的app.js(项目入口文件)中加载我们需要的中间件模块和自定义的模块如下:

app.js模块加载代码:

上述代码就是加载各个中间件模块并采用app.use来load这个模块,其中上述代码的最后一指定了将session存储在MongoDB数据库中,secret属性是对session的签名,通常是一个字符串,这是必选项,如果不写,

是无法完成将session存储进入数据库的,关于该功能的更详细介绍请查看文档,最后两句app.use('/',routes)和app.use('/users',users)代表对于这两个路由的访问处理代码我们封装在了routes和users模块中,er这两个模块都在routes文件夹下面。

完成了模块引入加载和一些基本的设置,现在来编写用户注册的逻辑代码,上面说到对于路径/的访问处理在routes模块中,这个模块指的就是routes文件夹下面的index.js,部分代码如下:

上述代码1-6行都是对外部模块的引入,8-行是对首页路由/的处理代码。行将该模块定义为router供外部调用。我们主要看-行,这些代码就是用户注册的代码,行监听来自用户对于/reg路由的post请求,首先判断两次密码是否一致,如果不一致在session中存储一个错误信息然后跳转到到当前页面显示错误信息,该错误信息供模板引擎显示给用户。如果两次密码一致首先对密码进行md5加密,使用的是nodejs提供的核心模块crypto,并生成一个对象模型User,该对象模型是mongoose中提供的一个model的实例,mongoose在它上面定义了一些操作数据库的方法。然后调用这个实例的findOne方法检测该用户是否已经存在,如果存在就保存错误信息到session并跳转到当前页显示错误。如果不存在这样一个用户就使用save方法进行用户信息保存,注册成功后将用户信息保存在session中,并保存一个success的提示信息,然后跳转到首页。这里需要注意一个坑,以前做php或者.net的时候,我们通常都是先查询数据库等数据库返回结果提示用户是否存在之后再进行用户的save然后在跳转,这是一种同步方式,跳转操作需要等待findOne操作返回结果之后才能进行。而nodejs中采用异步IO,最后的跳转操作需要放在findOne操作的回调函数中进行,跳转操作不必等待findone操作结束后执行,两者是异步的。如果将最后的redirect操作放在findOne操作外部而不是回调函数中,你会在控制台上得到一个Can't set headers after they are sent的错误,这是因为在fineOne以及save操作之前已经进行行了跳转,response响应已经结束,不能够重复响应请求。

到目前为止,用户注册模块基本上已经差不多完成了,最后需要说一下如何在页面上显示提示信息或者错误信息,之前我们将提示信息或者错误信息都保存在了session中,jade要显示错误信息,它是不能够直接访问session的,在express2.X即原书中是利用req.flash API+动态视图助手来实现的,就是发生错误的时候先将其利用req.flash方法存储下来,然后利用动态视图助手结合模板去渲染给用户。express4.X废弃了这种方式,我们可以利用req.flash 的原理来自己模拟一个这种机制,同时利用res.locals变量被保存起来,模板在渲染的时候是能够访问到服务端这个变量的。关于res.locals的更多介绍请查看文档。

为了模拟这种req.flash机制,我们在项目入口文件app.js(项目根目录下)添加一段代码如下:

这段代码的意思是用户请求和响应的时候,捕获session中存储的错误信息和用户提示,将其存储在response.locals变量中,这样模板就能够获取。对于错误信息和提示,由于只使用一次,存储后立即使用delete删除,对于用户信息,需要持久保存下来,则不删除。

这样,就能够显示用户提示或者错误信息。

下面演示一下完整的用户注册流程以及错误信息提示。

当用户名存在或密码不一致时,

当注册成功后跳转到首页并显示用户注册成功

同时对于注册成功和登陆成功拥有不同提示,如果该用户已经是登录状态则显示退出和发表文章按钮,如果没有登录,则显示的是登陆和立即注册按钮。

标签: 快速使用流量

本文链接地址:https://www.jiuchutong.com/biancheng/379432.html 转载请保留说明!

上一篇:node.js中实现kindEditor图片上传功能的方法教程(node.js入门经典pdf)

下一篇:详解node.js平台下Express的session与cookie模块包的配置(node.js app)

  • 公司注销股东收回公司车辆做什么账务处理
  • 材料采购成本是主营业务成本吗
  • 对方开给我的专票遗失了,让我上传发票
  • 增值税扣费
  • 企业工程款发票税率是多少2021
  • 发票的抵扣期限怎么填
  • 人力资源交哪些税费
  • 收到加工费普通发票怎么做账务处理
  • 应收账款转入呆账如何做帐
  • 跨年的管理费用怎么调到主营业务成本里
  • 出租的固定资产计提折旧
  • 小规模纳税人的税率是多少
  • 建筑施工企业的安全生产许可证由哪里颁发
  • 进项税额转出是好事还是坏事
  • 如何防止虚开发票 等舞弊行为?
  • 公司购买二手车怎么抵税
  • 住房公积金证书更新
  • 计算机著作权登记证书
  • 资本公积金转增资本属于所有者权益吗
  • 固定资产减值账务处理怎么做
  • 农业机耕服务是什么税收分类编码
  • 企业销售收入含不含税
  • 出售原材料属于营业收入吗
  • 企业减免企业所得税怎么算
  • 工程已验收,质量问题怎么解决
  • bios升级失败后如何恢复
  • windows4月更新
  • 软件开发怎么做会计分录
  • 预提费用冲销需要重新计提吗
  • 在建工程工程款优先受偿权
  • 不良资产购买流程
  • 房地产开发企业增值税怎么算
  • 免税不能开专票
  • bios设置教程视频
  • 财务软件的摊销额计入管理费用
  • 失业稳岗补贴要交社保吗
  • 以摊余成本计量的金融负债
  • 公司的利润交税之前不可能叫做什么
  • 未实际发生的费用 可否申请赔偿
  • 职工工资扣税比例
  • 办公经费包括工资吗
  • linux+php
  • 人工智能rl
  • nodejs官方文档
  • lincom命令
  • 应收账款确认坏账损失
  • git t
  • 购买的服务怎么做账
  • python多线程多核
  • 应发工资包括岗位工资吗
  • mysql日志有哪些
  • 一般纳税人登记 核算地址
  • 企业所得税法允许按规定的比例在税前扣除的准备金
  • 差旅费可以加计吗
  • 以销定产会计怎么做账科目
  • 金税盘买发票还要填交验旧表吗?
  • 支票填写的规范与常识
  • 销售额是营业额吗?
  • 社区养老服务平台
  • 如何建立明细分类账
  • 如何设置sql server
  • mysql索引方式有哪些
  • mac安装surge
  • 英特尔双核cpu
  • mac如何切换界面 快捷键
  • Win10 Redstone 11082视频快速上手:已知bug及新变化一览
  • iptables centos
  • Windows设置在哪里
  • unity协程会阻塞主线程吗
  • 网页设计中span
  • python 堆叠
  • unity游戏官网
  • Node.js中的核心模块包括哪些内容?
  • 基于unity3d
  • jquery增加一行和删除
  • 国家电子税务局登录入口
  • 国家税务局天津市税务总局官网
  • 车船税属于地方固定收入吗
  • 2016年小微企业所得税优惠政策文号
  • 商品房开超市
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设