前言

  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. Jquery_基础(一) 常用方法与选择器

    一.Jquery常用方法: $(function(){ //掌握$() 以及function(){} 结合 $("#a01").click(function(){ alert('h ...

  2. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](四)

    前言 上一篇<一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](三)>,我们完成了: * 引用SqlSugar * ...

  3. HDU 1000 A + B Problem(指针版)

    A + B Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  4. hset和hget

  5. keepalived VS zookeeper

    转载请标明出处http://www.cnblogs.com/haozhengfei/p/e3db73cb83afb213a3bff43a850d56c4.html keepalived VS zook ...

  6. 自己动手实现一个简单的JSON解析器

    1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着诸多优点.比如易读性更好,占用空间更少等.在 ...

  7. 常用排序算法java实现

    写在前面:纸上得来终觉浅.基本排序算法的思想,可能很多人都说的头头是到,但能说和能写出来,真的还是有很大区别的. 今天整理了一下各种常用排序算法,当然还不全,后面会继续补充.代码中可能有累赘或错误的地 ...

  8. 版本控制——TortoiseSVN (4)多版本并行开发 B

    =================================版权声明================================= 版权声明:原创文章 禁止转载  请通过右侧公告中的“联系邮 ...

  9. 人人都是CEO

    在这个互联网崛起的时代有些流行说法,比如:人人都是产品经理,人人都是程序员以突显行业繁荣的特点,但从更基本的出发点,难道人人不都是 CEO 么?个人的 CEO. 从这个名字套路出发,我沿着想了下去,作 ...

  10. ios开发-第二天

    1.#import可保证无论头文件出现多少次,只包含一次,而#include相反. 2.如果用户不提供文件路径的话,那么argc的值为1,可以用来做是否错误的判断. 3.面向对象和面向过程的区别 面向 ...