Node.js系列-express(上)

前言

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

Express

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

  安装方式:html

npm install express --save

  特性:前端

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

从本质上来讲,一个 Express 应用就是在调用各类中间件node

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

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

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

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-generatorexpress

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/

相关文章
相关标签/搜索