前言

  Node.js系列的第一篇:http,大概描述了通过使用node.js内置的api创建一个服务并监听request实现简单的增删改查。现在,我们就通过通读express官网及使用express框架来进一步了解node.js。

Express

  官网描述:基于 Node.js 平台,快速、开放、极简的 web 开发框架。

  安装方式:

npm install express --save

  特性:

    1.Web应用:Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用。

从本质上来说,一个 Express 应用就是在调用各种中间件。

    2.API:丰富的 HTTP 快捷方法和任意排列组合的 Connect 中间件,让你创建健壮、友好的 API 变得既快速又简单。

    3.性能:Express 不对 Node.js 已有的特性进行二次抽象,我们只是在它之上扩展了 Web 应用所需的基本功能。

  Hello World:监听3000端口起个服务

const express=require("express");
const app=express(); app.get('/',(req,res)=>{
res.end('Hello world!')
}); const server=app.listen(3000,()=>{
const host=server.address().address;
const port=server.address().port;
console.log(server.address());
console.log('Express app listening at http://%s:%s',host,port);
})

Express 应用生成器

  安装express-generator

npm install express-generator -g

  通过express-generator,并简单的创建实例并按照依赖包就可以帮我们快速地创建了一个应用骨架:

express 

cnpm install
.
├── app.js
├── bin
│ └── www
├── package.json
├── public
│ ├── images
│ ├── javascripts
│ └── stylesheets
│ └── style.css
├── routes
│ ├── index.js
│ └── users.js
└── views
├── error.jade
├── index.jade
└── layout.jade

  通过分析应用的结构,我们就大概知道了,app.js是项目的入口文件,实现依赖包的引入、视图模板引擎的设置、路由的跳转和错误事件的处理;bin/www则是启动项的配置信息;而package.json就是我们安装的一些依赖包及命令行启动项目的设置;public则是前端放置的静态文件目录;routes和views则分别为路由跳转的方法和放置视图的模板。

路由

  路由是指如何定义应用的端点(URIs)以及如何响应客户端的请求。

  路由是由一个 URI、HTTP 请求(GET、POST等)和若干个句柄组成,它的结构如下: app.METHOD(path, [callback...], callback), app 是 express对象的一个实例, METHOD 是一个 HTTP 请求方法, path 是服务器上的路径, callback 是当路由匹配时要执行的函数。

  简单的路由示例:

app.get('/',(req,res)=>{
res.end('Hello world!')
});

  简单理解app.use() 和 express.Router() 的区别

  Router 实例是一个完整的中间件和路由系统,因此常称其为一个 “mini-app”。就像官网描述的Router常被称为“mini-app”,所以在使用app.method和express.Router上会存在很大的疑惑。

  其实,我们可以简单的浏览下express-generator起的应用骨架可以了解到,app.use一般应用于全局的处理(例如全局中间件的引入等),而express.Router则偏向于具体业务逻辑的处理(其实个人觉得就是为了实现模块化的处理:正如官网描述可使用 express.Router 类创建模块化、可挂载的路由句柄)。

中间件

  中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req)), 响应对象(response object (res)), 和 web 应用中处于请求-响应循环流程中的中间件,一般被命名为 next 的变量。 

  中间件的功能包括:

  • 执行任何代码。
  • 修改请求和响应对象。
  • 终结请求-响应循环。
  • 调用堆栈中的下一个中间件。

  如果当前中间件没有终结请求-响应循环,则必须调用 next() 方法将控制权交给下一个中间件,否则请求就会挂起。

模板引擎

  express框架设置jade为默认模板引擎的代码:

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

  就我个人而言,并不是要jade,而是返璞归真的使用的html。则我们需要做的处理是:注释上两条代码并引入ejs进行模板的调整

var ejs=require('ejs');
app.engine('html',ejs.renderFile);
app.set('view engine','html');

  然后我们就可以在./views里面直接新建x.html了。

  参考:http://www.expressjs.com.cn/4x/api.html#app.engine

进程管理  

  当在生产环境运行Express应用程序时,使用进程管理器是很有用的:

    1.如果应用程序崩溃,会自动重新启动。
    2.深入了解运行时性能和资源消耗。
    3.动态修改设置以提高性能。
    4.控制群集。
  进程管理器有点像应用服务器:它是一个“容器”,用于为部署提供便利、提供高可用性并使您能够在运行时管理应用程序。
  最受Express和其他node应用程序欢迎的进程管理有:
    StrongLoop Process Manager
    PM2
    Forever
  使用这三种工具中的任何一种都是非常有帮助的,不过,在一个统一的接口中,使用工具为整个Node应用程序的生命周期提供全面的运行时和部署解决方案的唯一解决方案是使用 StrongLoop 进程管理器工具来处理整个Node应用程序的生命周期。
下面简要介绍一下其中的每一种工具。关于详细比较,见http://strong-pm.io/compare/

StrongLoop 进程管理器  

  StrongLoop 进程管理器是一个Node.js应用程序的生产过程管理器,具有内置的负载平衡、监视、多主机部署和图形控制台。它使你能够:
    将节点应用程序构建、打包并部署到本地或远程系统。
    查看CPU配置文件和堆快照,以优化性能并诊断内存泄漏。
    保持进程和群集的激活。
    查看应用程序的性能度量。
    使用Nginx集成轻松地管理多主机部署。
    将多个强循环PM统一到从ARC管理的分布式微服务运行时中。
  您可以使用一个强大的CLI工具、slc或图形工具Arc来使用StrongLoop PM。它是开源的,并得到了StrongLoop的专业支持。
  安装

npm install -g strongloop 

  基本用法

cd my-app 

slc start

  查看进程管理器和所有已部署应用程序的状态:

slc ctl

  列出所有管理下的应用程序(服务):

slc ctl ls

  停止应用:

slc ctl stop my-app

  重启应用:

slc ctl restart my-app

  您还可以“软重启”,这让工作线程处理一个宽限期来关闭现有的连接,然后重新启动当前的应用程序:

 slc ctl soft-restart my-app

  从管理器中移除一个应用:

slc ctl remove my-app

PM2  

  PM2是带有内置负载均衡器的Node.js应用程序的生产进程管理器。它允许您永远保持应用程序的生存,在不停机的情况下重新加载它们,并将促进常见的系统管理任务。它还允许您管理应用程序日志、监视和集群。
  更多:[https://github.com/Unitech/pm2]
  安装

npm install pm2 -g

  基本用法
  使用pm2启动一个应用程序需要指定应用程序的路径。但是,停止、重新启动和删除只需要应用程序的名称或id。

pm2 start app.js 

  使用pm2启动一个应用程序将立即将其发送到后台。您可以使用各种pm2命令从命令行控制后台应用程序。
一旦用pm2启动一个应用程序,它就注册在pm2的带有ID的进程列表中,这样就可以使用它们的ID来管理系统上不同目录的同名应用程序。
注意,如果有多个具有相同名称的应用程序正在运行,那么pm2命令将影响所有应用程序。所以使用ID而不是名字来管理单个的应用程序。
  进程列表:

pm2 list

  停止一个应用:

pm2 stop 0

  重启一个应用:

pm2 restart 0

  展示更多关于应用的信息:

pm2 show 0

  从pm2的注册表中删除应用程序:

pm2 delete 0

Forever  

  Forever 是一个简单的CLI工具,用于确保给定脚本连续运行(永远)。它简单的界面使它非常适合运行较小的Node应用程序和脚本部署。
  更多:[https://github.com/foreverjs/forever]
  安装

npm install forever -g

  基本用法
  要启动脚本,请使用“forever start”命令,并指定脚本的路径

forever start script.js

  这将以守护模式(在后台)运行脚本。
  要运行附加到终端的脚本,请省略“开始”。

forever script.js

  使用日志选项-l、-o、-e记录 forever 输出和脚本是个好主意,如下例所示:

forever start -l forever.log -o out.log -e err.log script.js

  进程列表:

forever list

  要停止由 forever 停止命令启动的脚本,并指定进程索引(由“forever 列表”命令列出)

forever stop 1

  或者,指定文件的路径:

forever stop script.js

  停止所有由forever 启动的脚本:

 forever stop all

总结

  express(上)这篇博文主要是小弟根据express官网总结并添加一些自己在建项目时遇到的问题解决方案以及对express的粗了解,希望对想了解express的小伙伴提供一些帮助。

  参考:http://www.expressjs.com.cn/

Node.js系列-express(上)的更多相关文章

  1. Node.js系列-express(下)

    前言 距上次更新博客又两个月多了,这两个月内除了上班时间忙公司的项目外,下班后也没有闲着,做了点外包,有小程序的,管理端的项目.也可能那段时间做的外包项目也都比较急,所以晚上都搞到一点左右睡,严重的压 ...

  2. node.js使用express框架进行文件上传

    关于node.js使用express框架进行文件上传,主要来自于最近对Settings-Sync插件做的研究.目前的研究算是取得的比较好的进展.Settings-Sync中通过快捷键上传文件,其实主要 ...

  3. 《唐三学node.js系列》—魂士篇&&三哥初始node.js

    前言 如果你有一定的前端基础,比如 HTML.CSS.JavaScript.jQuery.那么Node.js 能让你以最低的成本快速过渡成为一个全栈工程师(我称这个全栈为伪全栈,我认为的全栈也要精通数 ...

  4. Code Your First API With Node.js and Express: Set Up the Server

    How to Set Up an Express API Server in Node.js In the previous tutorial, we learned what the REST ar ...

  5. Node.js、express、mongodb 实现分页查询、条件搜索

    前言 在上一篇Node.js.express.mongodb 入门(基于easyui datagrid增删改查) 的基础上实现了分页查询.带条件搜索. 实现效果 1.列表第一页. 2.列表第二页 3. ...

  6. Node.js、express、mongodb 入门(基于easyui datagrid增删改查)

    前言 从在本机(win8.1)环境安装相关环境到做完这个demo大概不到两周时间,刚开始只是在本机安装环境并没有敲个Demo,从周末开始断断续续的想写一个,按照惯性思维就写一个增删改查吧,一方面是体验 ...

  7. node.js和express.js安装和使用步骤 [windows]

    PS: NODEJS:https://nodejs.org NPM:https://www.npmjs.com/ 一.node.js安装与配置 到https://nodejs.org/en/downl ...

  8. node.js系列笔记之node.js初识《一》

    node.js系列笔记之node.js初识<一> 一:环境说明 1.1 Linux系统CentOS 5.8 1.2 nodejs v0.10.15 1.3 nodejs源码下载地址 htt ...

  9. Node.js系列-http

    前言: 最近一直忙着公司项目的事,战友们的留言也没空回复,博客也有段时间没有更新了,年底了就是一个的忙啊~~~(ps:同感的也给个赞吧) 现在前端的就是一直地更新一直有新的东西出来,什么ES2015, ...

随机推荐

  1. 【转载】从头编写 asp.net core 2.0 web api 基础框架 (4) EF配置

    Github源码地址:https://github.com/solenovex/Building-asp.net-core-2-web-api-starter-template-from-scratc ...

  2. async/await 执行顺序详解

    随着async/await正式纳入ES7标准,越来越多的人开始研究据说是异步编程终级解决方案的 async/await.但是很多人对这个方法中内部怎么执行的还不是很了解,本文是我看了一遍技术博客理解 ...

  3. CSS的box-sizing属性

    box-sizing属性可以为三个值之一:content-box(default),border-box,padding-box. content-box,border和padding不计算入widt ...

  4. Java集合源码分析(三)Vevtor和Stack

    前言 前面写了一篇关于的是LinkedList的除了它的数据结构稍微有一点复杂之外,其他的都很好理解的.这一篇讲的可能大家在开发中很少去用到.但是有的时候也可能是会用到的! 注意在学习这一篇之前,需要 ...

  5. (亲测)1分钟破解IDM权限,傻瓜都能学会的破解方法(番外篇:利用破解工具直接破解IDM)

    Internet Download Manager (IDM)是比较好用的一款下载工具~ 上一节我讲到一种利用修改防火墙来进行阻止访问服务器,请参看这篇文章(亲测)躺着破解IDM下载权限,治疗不用破解 ...

  6. BZOJ 1001: [BeiJing2006]狼抓兔子【最大流/SPFA+最小割,多解】

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 23822  Solved: 6012[Submit][ ...

  7. UE4 unreliable 同步问题

    今天发现了一个问题,标记为unreliable的函数从来不执行,但是官方文档上的说明是只有在网络负载重时才不执行此类函数,哎哎哎.

  8. 学而精计算机公共基础学习之路TEST2(程序设计基础)

    程序设计基础 程序设计方法与风格 1.程序设计方法 程序设计: 指设计.编制.调试程序的方法和过程. 程序设计方法是研究问题求解如何进行系统构造的软件方法学.常用的程序设计方法有:结构化程序设计方法. ...

  9. js数组操作记录

    一 .splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目. arrayObject.splice(index,howmany,item1,.....,itemX) 参数 描述 in ...

  10. linux 下 用phpmailer类smtp发送邮件始终不成功,提示:ERROR: Failed to co

    https://zhidao.baidu.com/question/509191264.html?fr=iks&word=PHPMailerSMTP+connect()+failed& ...