Node.js系列-express(上)

时间:2022-11-03 04:39:45

前言

  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/