- 浏览: 658204 次
文章分类
最新评论
-
richondow:
Android实战开发租赁管理软件百度网盘下载:链接:http ...
Android实战开发租赁管理软件(适配UI,数据的存储,多线程下载)课程分享 -
古老的传言:
大哥,课程还有吗?有的话可否发一份给我?我的邮箱7606089 ...
马哥Linux系列七:实战大数据技术专题(Hadoop、NoSQL、Zookeeper、MapReduce)课程分享 -
kgtw:
1223137028@qq.com求发一份
基于Lucene4.6+Solr4.6+Heritrix1.14+S2SH实战开发从无到有垂直搜索引擎
使用Node.js完成的第一个项目的实践总结
项目简介
这是一个资产管理项目,主要的目的就是实现对资产的无纸化管理。通过为每个资产生成二维码,来联合移动终端完成对资产的审核等。这个项目既提供了Web端的管理界面也提供移动端(Andorid)的资产审核、派发等相关功能。
我们用Node.js构建该项目的Web端以及移动端的Serveice API。
项目主框架:Express 简介
Express 是一个非常流行的node.js的web框架。基于connect(node中间件框架)。提供了很多便于处理http请求等web开发相关的扩展。
Express简单的结构图:
Express的特性:
- 基于Connect构建
- 健壮的路由
- 提供丰富的HTTP处理方法
- 支持众多视图模板引擎(14+)
- 内容协商
- 专注于提供高性能
- 环境基于配置
- 快速构建可执行的应用程序
- 高测试覆盖率
前端框架简介
Bootstrap
Bootstrap是Twitter推出的一个用于前端开发的开源工具包。它由Twitter的设计师MarkOtto和JacobThornton合作开发,是一个CSS/HTML框架。Bootstrap是简洁、直观、强悍的前端开发框架,让web开发更迅速、简单。
同时,很多基于Bootstrap的开源插件也让Bootstrap社区更加活跃。
最新的Bootstrap3提供了非常强的定制化特性。包括Less,jQuery插件等。
Bootstrap 为您提供了所有这些基本的模块- Grid、Typography、Tables、Forms、Buttons和Responsiveness。
此外,还有大量其他有用的前端组件,比如Dropdowns、Navigation、Modals、Typehead、Pagination、Carousal、Breadcrumb、Tab、Thumbnails、Headers等等。
有了这些,你可以搭建一个Web 项目,并让它运行地更快速更轻松。
此外,由于整个框架是基于模块的,你可以通过定制你自己的CSS来使得它满足你的特殊需求。
它是基于几种最佳实践,我们认为这是一个很好的开始学习现代Web 开发的时机,一旦你掌握了HTML 和JavaScript/jQuery 的基本知识,你就可以在Web 开发中运用这些知识。
Ember.js
Ember.js是一个JavaScript的MVC框架,它由Apple前雇员创建的SproutCore2.0改名进化而来。
构建一个Ember应用程序,通常会使用到六个主要部件:应用程序(Application)、模型(Model)、视图(View)、模板(Template)、路由(Routing)和控制器(Controller)。
这里我们server端主要依赖express框架,它提供的这些功能跟express有些是相同的。我们主要应用了Ember的模板组件,Express对于它提供了很好的集成。我们只需要进行很简单的配置即可:
- app.set('viewengine','html');
- app.set('views',path.join(__dirname,'views'));
- app.set("viewoptions",{layout:false});
- app.register('.html',require('ejs'));
测试框架简介
should.js
should 是用于node.js的一个表述性、可读性很强的测试无关的“断言”库。它是BDD风格的,用一个单例的不可枚举的属性访问器扩展了Object的prototype,允许你表述对象应该展示的行为。
should的一个特性是可以支持链式断言,比如:
- user.should.be.an.instanceOf(Object).and.have.property('name','tj');
- user.pets.should.be.instanceof(Array).and.have.lengthOf(4);
mocha
mocha + should.js
项目组件 - node modules
mysql
功能简介:mysql- node.js平台mysql驱动,支持事务、连接池、集群、sql注入检测、多做参数传递写法等特性。
主页地址:https://github.com/felixge/node-mysql
eventproxy
功能简介:eventproxy- node.js 异步回调代理。主要用来解决node中深层次回调嵌套的问题,支持很多异步模式:多类型异步、重复异步、持续型异步。
主页地址:https://github.com/JacksonTian/eventproxy
validator
功能简介:javascript的验证工具集,支持两种模式:check(校验)/sanitize(处理),同时提供了可扩展的错误处理。
主页地址:http://github.com/chriso/node-validator
ejs
主页地址:https://github.com/visionmedia/ejs
loader
功能简介:loader- 资源加载工具,可以区分开发模式、发布模式;在发布模式下可进行资源压缩、合并。以实现减少静态资源带宽并且便于实现客户端缓存
主页地址:https://github.com/TBEDP/loader
canvas
功能简介:canvas - node.js 常用的图形图像处理库,是很多其它库的基础依赖库
主页地址:https://github.com/learnboost/node-canvas
captchagen
功能简介:captchagen-node.js常用验证码图片处理库,依赖上面的canvas库
主页地址:http://github.com/wearefractal/captchagen
crypto-js
功能简介:crypto-js- javascript 常用加密库、hash库封装,支持sha-x / md5 / hash等各种加密、hash算法
主页地址:http://github.com/wearefractal/captchagen
nodemailer
功能简介:nodemailer- 邮件发送工具,支持SMTP等邮件发送协议
主页地址:http://github.com/andris9/nodemailer
qrcode
功能简介:qrcode- node.js服务端的qrcode生成器。支持多种输出类型(dataUrl/file/bitArray)
主页地址:http://github.com/soldair/node-qrcode
pdfkit
功能简介:qrcode- node.js服务端的qrcode生成器。支持多种输出类型(dataUrl/file/bitArray)
主页地址:http://github.com/soldair/node-qrcode
excel
功能简介:excel- node.js excel解析器,支持xlsx(Excel2007+)
主页地址:https://github.com/trevordixon/excel
excel-export
功能简介:excel-export- node.js excel生成器,支持导出excel
主页地址:https://github.com/functionscope/Node-Excel-Export
net-ping
功能简介:net-ping- node.js 对ping的封装,用于测试目标主机是否可达
主页地址:https://bitbucket.org/stephenwvickers/node-net-ping
debug
功能简介:debug- node.js debug工具,对console.log的封装,支持多种颜色输出。
主页地址:https://github.com/visionmedia/debug
项目组织结构
NPM - Node.js 模块依赖管理工具
npm是管理node.js模块依赖的工具,依赖于开源技术的优势就是你有非常多的优秀库可以帮助你快速构建一个系统,但就像一把双刃剑,由于开源导致版本的升级不可控。这时,一个集中性的模块依赖管理工具的优势就十分明显。它负责帮你管理开源项目的版本,你只需要添加对某个开源模块的依赖即可。
unix/linux下安装npm:
- curlhttp://npmjs.org/install.sh|sudosh
如何在项目中使用npm管理你的依赖:
(1)在项目的根目录下创建一个package.json文件
在dependencies下添加所需要依赖的模块,示例如下:- $cdprojectPath
- $npminstall
这时你会发现,项目的根目录下多了一个node_modules文件夹,那里面就是从npm远程库里下载的模块然后“安装”到你的项目中的。
现在,你就可以在你的项目中应用你依赖的这些modules了。你可以通过require关键字来使用他们。比如,
- require("eventproxy");
Node.js 模块加载机制
node.js的模块加载基于CommonJS规范。
在Node.js中,将模块分为两大类:
(1)原生模块
原生模块在Node.js源代码编译的时候编译进了二进制执行文件,加载速度最快。
(2)文件模块
node.js依赖modulepath(模块路径)来加载module,而modulepath的生成规则主要是从当前文件目录开始查找node_modules文件夹,然后依次进入父目录查找父目录下的node_modules目录直至到根目录下得node_modules目录。所以在require的时候,如果带上module的路径,则按照该路径查找,如果没有就按照上面的node_modules文件夹向上追溯查找,如果都没有找到,则抛出异常。
自动化部署
项目环境的构建、部署都是自动化的。
我们假设项目最终会发布在任意版本的Ubuntuserver上。在安装git的前提下,通过如下命令去clone项目到本地:
- gitclonegit://github.com/yanghua/FixedAssetManager_Server.git
- node_install_ubuntu.sh - 在ubuntuserver上安装node.js的脚本
- node-canvas-install_ubuntu.sh - 在Ubuntuserver上安装node-canvas的脚本
- mysql_install_ubuntu.sh - 在Ubuntu server上安装mysql的脚本
- dispatch.sh - 部署项目的脚本
- 内置的负载均衡器(使用nodecluster module)
- 以守护进程运行
- 0s(不间断)重启
- 为ubuntu/ CentOS 提供启动脚本
- 关闭不稳定的进程(避免无限死循环)
- 基于控制台监控
- HTTP API
- 远程控制以及实时监控接口
异常监控与邮件推送
node.js 到处都是异步调用。常用的try/catch同步捕获异常并处理的方式,在这里不起作用了。这是因为很多callback已经离开了当时try的上下文,导致无法获取异常产生的堆栈信息。基于这个问题,我们对异常处理的模式按类型进行区分处理:
(1)http请求异常
这种异常Express就可以进行处理。如果是非法请求,在路由的时候,对未匹配的请求进行统一处理:
- app.get("*",others.fourofour);
(2)业务异常
这种异常通常不会影响到程序的运行,我们以不同的异常代码返回给前端或者终端,来给调用端友好的提示。
(3)应用程序级别的异常或必须处理的错误
这种情况下,应用程序可能没有办法处理异常,也有可能由应用程序抛出。对于这种应用程序级别的异常。我们用两种方式来catch:
[1]利用Express提供的应用程序的异常处理机制:- app.error(function(err,req,res,next){
- mailServie.sendMail({
- subject:"FixedAssetManager_Server[AppError]",
- text:err.message+"\n"+err.stack+"\n"+err.toString()
- });
- if(errinstanceofPageNotFoundError){
- res.render("errors/404");
- }elseif(errinstanceofServerError){
- res.render("errors/500");
- }
- });
[2]应用程序已经无法响应处理了,则利用node.js提供的,对于进程级别的异常处理方式:
- process.on("uncaughtException",function(err){
- mailServie.sendMail({
- subject:"FixedAssetManager_Server[AppError]",
- text:err.message+"\n"+err.stack+"\n"+err.toString()
- });
- });
静态资源优化:压缩合并与缓存
web应用中对于资源的定义大致分为:静态资源、动态资源两种。动态资源通常是可变的,需要进行相应处理的,而静态资源在线上通常都是不会变的。常见的静态资源有:javascript文件、css文件、图片文件等。对于这些静态文件,我们通过设置过期时间来进行缓存。而对于文本文件,由于浏览器的解析行为,对他们进行合并或者压缩都不会产生影响。
这里需要提到我们在组件中介绍的Loader。在项目刚被clone下来的时候,需要先执行makebuild来对项目进行初始化。在初始化的过程中,Loader会对项目的views文件夹中的文件进行扫描。它通常会扫描html界面:查找类似于如下的片段:
- <!--style-->
- <%-Loader("/public/stylesheets/login.min.css")
- .css("/public/libs/bootstrap/css/bootstrap.min.css")
- .css("/public/stylesheets/login.css")
- .done(assets)
- %>
- <!--script-->
- <%-Loader("/public/libs/js/login.min.js")
- .js("/public/libs/jquery/jquery-1.10.2.min.js")
- .js('/public/libs/bootstrap/js/bootstrap.min.js')
- .js("/public/libs/CryptoJS_v3.1.2/rollups/sha256.js")
- .js("/public/libs/js/login.js")
- .done(assets)
- %>
- //configforproductionenv
- app.configure("production",function(){
- app.use('/public',express.static(staticDir,{maxAge:maxAge}));
- app.use(express.errorHandler());
- app.set('viewcache',true);
- });
Restful风格的URL
Restful以“Resource”为核心概念,认为URL是用来表示一种资源。而不应该表示一个动作或者其他的东西。而动作,比如“CRUD”正好对应http的四个method:get/post/put/delete。本项目中,我们大部分的URL以Restful风格为主,但没有严格贯彻执行。
前端内容模板化、组件化
前端我们采用的是ejs的模板来构建,它很好得实现了html的片段化、组件化。有一个基础的模板,别的都只是一块html片段。它们在服务端完成组合、解析,生成完整的html流输出到客户端。
这样的开发模式,使得前端代码的划分比较清晰,组件化也使得代码的复用变得更容易。
makefile
在项目初始化的过程中,我们使用makefile文件来使得一些动作自动化运行。比如我们之前提到过的构建assets.json来合并文件的动作,就是通过执行makebuild文件来完成的。
关于Debug
目前,Node.js还没有很强大的调试工具。常用的辅助诊断方式就是打log。但繁多的日志输出,混杂在http log里实在是不方便判断。我们在项目中使用了debug module来进行debug,他支持对log加不同颜色的key word并且还支持timestamp。你在一大堆日志中,一眼就足以区分是从哪个module或者组件输出的。我们在项目中对不同的layer应用不同的关键字:
- vardebug4Ctrller=require("debug")("controller");
- vardebug4Proxy=require("debug")("proxy");
- vardebug4Lib=require("debug")("lib");
- vardebug4Test=require("debug")("test");
- vardebug4Other=require("debug")("other");
将其置为全局:
- global.debugCtrller=debug4Ctrller;
- global.debugProxy=debug4Proxy;
- global.debugLib=debug4Lib;
- global.debugTest=debug4Test;
- global.debugOther=debug4Other;
- debugCtrller("XXX%s","YYY");
源码 & 总结 & TODO
项目简介
这是一个资产管理项目,主要的目的就是实现对资产的无纸化管理。通过为每个资产生成二维码,来联合移动终端完成对资产的审核等。这个项目既提供了Web端的管理界面也提供移动端(Andorid)的资产审核、派发等相关功能。
我们用Node.js构建该项目的Web端以及移动端的Serveice API。
项目主框架:Express 简介
Express 是一个非常流行的node.js的web框架。基于connect(node中间件框架)。提供了很多便于处理http请求等web开发相关的扩展。
Express简单的结构图:
Express的特性:
- 基于Connect构建
- 健壮的路由
- 提供丰富的HTTP处理方法
- 支持众多视图模板引擎(14+)
- 内容协商
- 专注于提供高性能
- 环境基于配置
- 快速构建可执行的应用程序
- 高测试覆盖率
前端框架简介
Bootstrap
Bootstrap是Twitter推出的一个用于前端开发的开源工具包。它由Twitter的设计师MarkOtto和JacobThornton合作开发,是一个CSS/HTML框架。Bootstrap是简洁、直观、强悍的前端开发框架,让web开发更迅速、简单。
同时,很多基于Bootstrap的开源插件也让Bootstrap社区更加活跃。
最新的Bootstrap3提供了非常强的定制化特性。包括Less,jQuery插件等。
Bootstrap 为您提供了所有这些基本的模块- Grid、Typography、Tables、Forms、Buttons和Responsiveness。
此外,还有大量其他有用的前端组件,比如Dropdowns、Navigation、Modals、Typehead、Pagination、Carousal、Breadcrumb、Tab、Thumbnails、Headers等等。
有了这些,你可以搭建一个Web 项目,并让它运行地更快速更轻松。
此外,由于整个框架是基于模块的,你可以通过定制你自己的CSS来使得它满足你的特殊需求。
它是基于几种最佳实践,我们认为这是一个很好的开始学习现代Web 开发的时机,一旦你掌握了HTML 和JavaScript/jQuery 的基本知识,你就可以在Web 开发中运用这些知识。
Ember.js
Ember.js是一个JavaScript的MVC框架,它由Apple前雇员创建的SproutCore2.0改名进化而来。
构建一个Ember应用程序,通常会使用到六个主要部件:应用程序(Application)、模型(Model)、视图(View)、模板(Template)、路由(Routing)和控制器(Controller)。
这里我们server端主要依赖express框架,它提供的这些功能跟express有些是相同的。我们主要应用了Ember的模板组件,Express对于它提供了很好的集成。我们只需要进行很简单的配置即可:
- app.set('viewengine','html');
- app.set('views',path.join(__dirname,'views'));
- app.set("viewoptions",{layout:false});
- app.register('.html',require('ejs'));
测试框架简介
should.js
should 是用于node.js的一个表述性、可读性很强的测试无关的“断言”库。它是BDD风格的,用一个单例的不可枚举的属性访问器扩展了Object的prototype,允许你表述对象应该展示的行为。
should的一个特性是可以支持链式断言,比如:
- user.should.be.an.instanceOf(Object).and.have.property('name','tj');
- user.pets.should.be.instanceof(Array).and.have.lengthOf(4);
mocha
mocha + should.js
项目组件 - node modules
mysql
功能简介:mysql- node.js平台mysql驱动,支持事务、连接池、集群、sql注入检测、多做参数传递写法等特性。
主页地址:https://github.com/felixge/node-mysql
eventproxy
功能简介:eventproxy- node.js 异步回调代理。主要用来解决node中深层次回调嵌套的问题,支持很多异步模式:多类型异步、重复异步、持续型异步。
主页地址:https://github.com/JacksonTian/eventproxy
validator
功能简介:javascript的验证工具集,支持两种模式:check(校验)/sanitize(处理),同时提供了可扩展的错误处理。
主页地址:http://github.com/chriso/node-validator
ejs
主页地址:https://github.com/visionmedia/ejs
loader
功能简介:loader- 资源加载工具,可以区分开发模式、发布模式;在发布模式下可进行资源压缩、合并。以实现减少静态资源带宽并且便于实现客户端缓存
主页地址:https://github.com/TBEDP/loader
canvas
功能简介:canvas - node.js 常用的图形图像处理库,是很多其它库的基础依赖库
主页地址:https://github.com/learnboost/node-canvas
captchagen
功能简介:captchagen-node.js常用验证码图片处理库,依赖上面的canvas库
主页地址:http://github.com/wearefractal/captchagen
crypto-js
功能简介:crypto-js- javascript 常用加密库、hash库封装,支持sha-x / md5 / hash等各种加密、hash算法
主页地址:http://github.com/wearefractal/captchagen
nodemailer
功能简介:nodemailer- 邮件发送工具,支持SMTP等邮件发送协议
主页地址:http://github.com/andris9/nodemailer
qrcode
功能简介:qrcode- node.js服务端的qrcode生成器。支持多种输出类型(dataUrl/file/bitArray)
主页地址:http://github.com/soldair/node-qrcode
pdfkit
功能简介:qrcode- node.js服务端的qrcode生成器。支持多种输出类型(dataUrl/file/bitArray)
主页地址:http://github.com/soldair/node-qrcode
excel
功能简介:excel- node.js excel解析器,支持xlsx(Excel2007+)
主页地址:https://github.com/trevordixon/excel
excel-export
功能简介:excel-export- node.js excel生成器,支持导出excel
主页地址:https://github.com/functionscope/Node-Excel-Export
net-ping
功能简介:net-ping- node.js 对ping的封装,用于测试目标主机是否可达
主页地址:https://bitbucket.org/stephenwvickers/node-net-ping
debug
功能简介:debug- node.js debug工具,对console.log的封装,支持多种颜色输出。
主页地址:https://github.com/visionmedia/debug
项目组织结构
NPM - Node.js 模块依赖管理工具
npm是管理node.js模块依赖的工具,依赖于开源技术的优势就是你有非常多的优秀库可以帮助你快速构建一个系统,但就像一把双刃剑,由于开源导致版本的升级不可控。这时,一个集中性的模块依赖管理工具的优势就十分明显。它负责帮你管理开源项目的版本,你只需要添加对某个开源模块的依赖即可。
unix/linux下安装npm:
- curlhttp://npmjs.org/install.sh|sudosh
如何在项目中使用npm管理你的依赖:
(1)在项目的根目录下创建一个package.json文件
在dependencies下添加所需要依赖的模块,示例如下:- $cdprojectPath
- $npminstall
这时你会发现,项目的根目录下多了一个node_modules文件夹,那里面就是从npm远程库里下载的模块然后“安装”到你的项目中的。
现在,你就可以在你的项目中应用你依赖的这些modules了。你可以通过require关键字来使用他们。比如,
- require("eventproxy");
Node.js 模块加载机制
node.js的模块加载基于CommonJS规范。
在Node.js中,将模块分为两大类:
(1)原生模块
原生模块在Node.js源代码编译的时候编译进了二进制执行文件,加载速度最快。
(2)文件模块
node.js依赖modulepath(模块路径)来加载module,而modulepath的生成规则主要是从当前文件目录开始查找node_modules文件夹,然后依次进入父目录查找父目录下的node_modules目录直至到根目录下得node_modules目录。所以在require的时候,如果带上module的路径,则按照该路径查找,如果没有就按照上面的node_modules文件夹向上追溯查找,如果都没有找到,则抛出异常。
自动化部署
项目环境的构建、部署都是自动化的。
我们假设项目最终会发布在任意版本的Ubuntuserver上。在安装git的前提下,通过如下命令去clone项目到本地:
- gitclonegit://github.com/yanghua/FixedAssetManager_Server.git
- node_install_ubuntu.sh - 在ubuntuserver上安装node.js的脚本
- node-canvas-install_ubuntu.sh - 在Ubuntuserver上安装node-canvas的脚本
- mysql_install_ubuntu.sh - 在Ubuntu server上安装mysql的脚本
- dispatch.sh - 部署项目的脚本
- 内置的负载均衡器(使用nodecluster module)
- 以守护进程运行
- 0s(不间断)重启
- 为ubuntu/ CentOS 提供启动脚本
- 关闭不稳定的进程(避免无限死循环)
- 基于控制台监控
- HTTP API
- 远程控制以及实时监控接口
异常监控与邮件推送
node.js 到处都是异步调用。常用的try/catch同步捕获异常并处理的方式,在这里不起作用了。这是因为很多callback已经离开了当时try的上下文,导致无法获取异常产生的堆栈信息。基于这个问题,我们对异常处理的模式按类型进行区分处理:
(1)http请求异常
这种异常Express就可以进行处理。如果是非法请求,在路由的时候,对未匹配的请求进行统一处理:
- app.get("*",others.fourofour);
(2)业务异常
这种异常通常不会影响到程序的运行,我们以不同的异常代码返回给前端或者终端,来给调用端友好的提示。
(3)应用程序级别的异常或必须处理的错误
这种情况下,应用程序可能没有办法处理异常,也有可能由应用程序抛出。对于这种应用程序级别的异常。我们用两种方式来catch:
[1]利用Express提供的应用程序的异常处理机制:- app.error(function(err,req,res,next){
- mailServie.sendMail({
- subject:"FixedAssetManager_Server[AppError]",
- text:err.message+"\n"+err.stack+"\n"+err.toString()
- });
- if(errinstanceofPageNotFoundError){
- res.render("errors/404");
- }elseif(errinstanceofServerError){
- res.render("errors/500");
- }
- });
[2]应用程序已经无法响应处理了,则利用node.js提供的,对于进程级别的异常处理方式:
- process.on("uncaughtException",function(err){
- mailServie.sendMail({
- subject:"FixedAssetManager_Server[AppError]",
- text:err.message+"\n"+err.stack+"\n"+err.toString()
- });
- });
静态资源优化:压缩合并与缓存
web应用中对于资源的定义大致分为:静态资源、动态资源两种。动态资源通常是可变的,需要进行相应处理的,而静态资源在线上通常都是不会变的。常见的静态资源有:javascript文件、css文件、图片文件等。对于这些静态文件,我们通过设置过期时间来进行缓存。而对于文本文件,由于浏览器的解析行为,对他们进行合并或者压缩都不会产生影响。
这里需要提到我们在组件中介绍的Loader。在项目刚被clone下来的时候,需要先执行makebuild来对项目进行初始化。在初始化的过程中,Loader会对项目的views文件夹中的文件进行扫描。它通常会扫描html界面:查找类似于如下的片段:
- <!--style-->
- <%-Loader("/public/stylesheets/login.min.css")
- .css("/public/libs/bootstrap/css/bootstrap.min.css")
- .css("/public/stylesheets/login.css")
- .done(assets)
- %>
- <!--script-->
- <%-Loader("/public/libs/js/login.min.js")
- .js("/public/libs/jquery/jquery-1.10.2.min.js")
- .js('/public/libs/bootstrap/js/bootstrap.min.js')
- .js("/public/libs/CryptoJS_v3.1.2/rollups/sha256.js")
- .js("/public/libs/js/login.js")
- .done(assets)
- %>
- //configforproductionenv
- app.configure("production",function(){
- app.use('/public',express.static(staticDir,{maxAge:maxAge}));
- app.use(express.errorHandler());
- app.set('viewcache',true);
- });
Restful风格的URL
Restful以“Resource”为核心概念,认为URL是用来表示一种资源。而不应该表示一个动作或者其他的东西。而动作,比如“CRUD”正好对应http的四个method:get/post/put/delete。本项目中,我们大部分的URL以Restful风格为主,但没有严格贯彻执行。
前端内容模板化、组件化
前端我们采用的是ejs的模板来构建,它很好得实现了html的片段化、组件化。有一个基础的模板,别的都只是一块html片段。它们在服务端完成组合、解析,生成完整的html流输出到客户端。
这样的开发模式,使得前端代码的划分比较清晰,组件化也使得代码的复用变得更容易。
makefile
在项目初始化的过程中,我们使用makefile文件来使得一些动作自动化运行。比如我们之前提到过的构建assets.json来合并文件的动作,就是通过执行makebuild文件来完成的。
关于Debug
目前,Node.js还没有很强大的调试工具。常用的辅助诊断方式就是打log。但繁多的日志输出,混杂在http log里实在是不方便判断。我们在项目中使用了debug module来进行debug,他支持对log加不同颜色的key word并且还支持timestamp。你在一大堆日志中,一眼就足以区分是从哪个module或者组件输出的。我们在项目中对不同的layer应用不同的关键字:
- vardebug4Ctrller=require("debug")("controller");
- vardebug4Proxy=require("debug")("proxy");
- vardebug4Lib=require("debug")("lib");
- vardebug4Test=require("debug")("test");
- vardebug4Other=require("debug")("other");
将其置为全局:
- global.debugCtrller=debug4Ctrller;
- global.debugProxy=debug4Proxy;
- global.debugLib=debug4Lib;
- global.debugTest=debug4Test;
- global.debugOther=debug4Other;
- debugCtrller("XXX%s","YYY");
相关推荐
① 第一章节:讲解node.js基础知识,比如node安装、引入基础模块等等,从0开始 ② 第二章节:带领大家学习node.js框架,Express框架和Koa框架的使用 ③ 项目实践,在这一章节会使用Koa框架制作一个简单的聊天室项目...
了解Node.js的异步和同步编程模型使用模块和Web框架创建简单的Node.js应用程序调试和诊断Node.js应用程序中的问题将Node.js应用程序部署到生产环境使用Fastify,Hapi和Express.js创建一个简单的Web应用程序探索有关...
node的30天是一个针对node.js的代码基础教程系列,旨在提供基于项目的实践学习经验以及谈论其概念性细节。 第16天-Zlib模块 第17天-使用node.js在MySQL中进行CRUD 第18天-node.js中的回调概念 第19天-node.js中的...
第一部分包括第1到4章,概述了Node.js、MongoDB和Backbone.js的核心技术。第二部分包括第5章到第10章,介绍如何使用这些工具去构建一个具有社交网络风格的网站。如果是刚开始学习,建议先从第一部分获取一些背景知识...
第一部分包括第1到4章,概述了Node.js、MongoDB和Backbone.js的核心技术。第二部分包括第5章到第10章,介绍如何使用这些工具去构建一个具有社交网络风格的网站。如果是刚开始学习,建议先从第一部分获取一些背景知识...
第 1 章 初识 Express .......................................................................................................................1 1.1 JavaScript 革命 .........................................
Node.js-实践博客Node.js 实践API 文档根: 路由(使用 x-www-form-urlencoded (--data 在 curl -X 末尾)):帖子发布(创建): 获取(阅读): 放置(更新): 删除:注释发布(创建): 获取(阅读): 放置...
Node.js挑战 欢迎参加Node.js挑战赛,您将在7天内每天获得有关Node.js...第一天介绍了您使用Node.js的经历-您将学习如何准备环境以及如何编写和测试Node.js程序。 在接下来的几天中,您将学习如何使用Node.js与操作系
Node.js挑战 欢迎参加Node.js挑战赛,您将在7天内每天获得有关Node.js...第一天介绍了您使用Node.js的经历-您将学习如何准备环境以及如何编写和测试Node.js程序。 在接下来的几天中,您将学习如何使用Node.js与操作系
Node.js挑战 欢迎参加Node.js挑战赛,您将在7天内每天获得有关Node.js...第一天介绍了您使用Node.js的经历-您将学习如何准备环境以及如何编写和测试Node.js程序。 在接下来的几天中,您将学习如何使用Node.js与操作系
Node.js挑战欢迎参加Node.js挑战赛,您将在7天内每天获得有关Node.js的特定信息,并在实践中使用它。 请记住,从第一天到最后一天要一遍一遍地执行具有挑战性的一天(这要感谢您的知识会得到组织和完善)。 每天都是...
您需要了解JavaScript 了解调用堆栈找出事件循环var,const,let 模板字符串,对象文字箭头功能非结构化分配班级承诺,异步/等待前端javascript第2章节点功能运行REPL和js文件创建一个模块全局,控制台和计时器出口...
使用Node.js上传图像介绍范围对于我们来说,此存储库是一种简单的实践,以了解如何使用上传图像(文件) 这是一个具有基本形式(名称,姓氏和头像)的页面,而第二个页面将显示发送的数据。技术为了使我们的生活更...
我的第一个后端打字稿 | :open_book: 介绍 该存储库是Node.JS中的API-Rest,我开发该API的目的是在后端应用程序中将打字稿的基本概念付诸实践。 :globe_with_meridians: 技术领域 :eight-spoked_asterisk: 节点JS...
第一个存储库 第一个存储库遵循 更新 创建 TCP 服务器 tcp_server.js 是 TCP 服务器的生命周期示例 tcp_server_echo.js 正在使用套接字对象,并测试管道输入/输出套接字。 tcp_server_chat.js 是一个简单的 TCP ...
MongoDB数据库请按照以下步骤操作(如果这是您的第一个数据库): 1.在MongoDB上注册在注册2.项目创建一个新项目(在该项目中,我们将其mongocrud ): 2.1。 簇让我们创建一个具有以下配置的(免费)集群: 云提供...
这个想法是通过连接这些框架来解决常见问题,构建一个强大的框架来支持日常开发需求,并帮助开发人员在使用流行的 JavaScript 组件时使用更好的实践。在你开始之前在开始之前,我们建议您阅读有关组装 MEAN.JS 应用...
目录基本信息这个全栈Web应用程序项目将使用Node.js和React来实践现代技术。 您可以添加积分,创建调查并发送至电子邮件。 在此处查找Heroku部署的版本: : :key: 测试应用测试卡号4242 4242 4242 4242 (其他数据...
该存储库是关于如何使用Node.js进行构建的经过实践检验的真实示例的集合。 该存储库的结构 该存储库以特定方式构建: 顶级目录是应用程序的类别目录,例如CLI , server和utility ,它们使您能够查找所要查找的特定...
nodejs-测试 只有第一个 node.js 测试