Exprsss入门讲解什么是ExpressExpress是一个基于Node.js平台的快速、开放、极简的Web开发框架。Express安装及使用安装一个新的Myapp目录使用cmd创建一个packageage.json文件npminitinstallexpressnpminstallexpress--save使用进入Myapp目录,创建一个名为app.js的文件,然后将以下代码复制进去:varexpress=require('express');//导入expressvarapp=express();app.get('/',function(req,res){\res.send('HelloWorld!');});varserver=app.listen(3000,function(){varhost=server.address().address;varport=server.address().port;console.log('示例应用监听http://%s:%s',主机,端口);});运行nodeapp.js在浏览器中打开http://localhost:3000/并查看输出。Express生成器我们使用Express生成器来快速创建应用程序框架。这是一个脚手架工具。安装npminstallexpress-generator-g创建工作目录,在你的工作目录下运行下面的命令expressmyapp,这样会在你的工作目录下创建一个myapp文件夹,然后我们进入myapp文件夹,运行下面的命令安装依赖npminstall完成后,运行以下命令启动setDEBUG=myapp&npmstart在浏览器中打开http://localhost:3000/URL可以看到应用。ExpressRouting路由是指如何定义应用程序端点(URI)以及如何响应客户端请求。路由由一个URI、HTTP请求(GET、POST等)和几个句柄组成,其结构如下:app.METHOD(path,[callback...],callback),app是express对象的一个??实例,METHOD是HTTP请求方法,path是服务器上的路径,callback是匹配到路由时执行的函数。这是一个基本的路由示例varexpress=require('express');varapp=express();app.get('/',function(req,res){res.send('firstroute');});路由方法路由方法源于HTTP请求方法,与express实例相关联。Express定义了HTTP请求对应的如下路由方法:get,post,put,head,delete,options,trace,copy,lock,mkcol,move,purge,propfind,proppatch,unlock,report,mkactivity,checkout,merge,m-搜索、通知、订阅、取消订阅、修补、搜索和连接。app.all()是一种特殊的路由方法,没有任何HTTP方法与之对应,其作用是为一条路径上的所有请求加载中间件。路由路径使用字符串的路由路径示例://请求匹配根路径app.get('/',function(req,res){res.send('root');});使用字符串模式的路由示例路径://匹配acd和abcdapp.get('/ab?cd',function(req,res){res.send('ab?cd');});使用正则表达式的路由路径示例://匹配路径中包含a的任何路径app.get(/a/,function(req,res){res.send('/a/');});在脚手架中使用打开myapp文件夹下的routes文件夹,里面有脚手架为我们创建的index.js路由文件。打开后可以看到varexpress=require('express');varrouter=express.Router();router.get('/',function(req,res,next){res.render('index',{title:'Express'});//加载索引模板并传入标题});module.exports=路由器;这是一个route,我们打开myapp,在下面的app.js(或者index.js)文件中,可以找到这么两行代码varindex=require('./routes/index');//引入index文件app.use('/',index);//使用Express模板引擎需要在应用中进行如下设置才能让Express渲染模板文件:views,模板文件放置的目录,例如:app.set('views','./views')viewengine,templateengine例如:app.set('viewengine','jade')安装对应的模板引擎npm包。npminstalljade--save//或npminstallejs--save在views目录下生成一个名为index.jade的Jade模板文件,内容如下:htmlheadtitle!=titlebodyh1!=messageExpressmiddlewareExpress是一个self功能极简,是一个完全由路由和中间件组成的web开发框架:本质上就是一个Express应用在调用各种中间件。中间件(Middleware)是Web应用程序中可以访问请求对象(requestobject(req))、响应对象(responseobject(res))、请求-响应循环过程中的中间件的函数,一般命名为A下一个变量。中间件的功能包括:执行任何代码。修改请求和响应对象。结束请求-响应循环。调用堆栈中的下一个中间件。如果当前中间件没有终止请求-响应循环,则必须调用next()方法将控制权传递给下一个中间件,否则请求将挂起。Express应用程序可以使用以下类型的中间件:应用程序级中间件路由级中间件错误处理中间件内置中间件第三方中间件应用程序级中间件应用程序级中间件使用app.use()和app对象绑定app.METHOD(),其中,METHOD为需要处理的HTTP请求的方法,如GET、PUT、POST等,全部小写.varapp=express();app.use('/',function(req,res,next){console.log('请求类型:',req.method);next();});路由中的这个函数就是中间件,它有3个参数,分别是req(请求对象).res(响应对象).next(),如果去掉next(),下一个中间件就不会执行了。例如,varapp=express();app.use('/user/:id',function(req,res,next){console.log('RequestType:',req.method);});app.use('/user/:id',function(req,res,next){console.log('RequestType:',req.method);next()});如果需要跳过中间件栈中剩余的中间件,调用next('route')方法将控制权转移到下一个路由。注意:next('route')仅对使用app.VERB()或router.VERB()加载的中间件有效。app.get('/user/:id',function(req,res,next){//如果用户id为0,则跳到下一条路由if(req.params.id==0)next('route');//否则,将控制传递给堆栈中的下一个中间件elsenext();//},function(req,res,next){//渲染一个常规页面res.render('regular');});//处理/user/:id,渲染一个特殊的页面app.get('/user/:id',function(req,res,next){res.render('special');});route-levelmiddle路由级中间件和应用级中间件一样,只不过它绑定的对象是express.Router()。varrouter=express.Router();使用router.use()或router.VERB()加载的路由器类。varapp=express();varrouter=express.Router();//一个中间件堆栈,显示对/user/:idrouter.use('/user/:id',function(req,res,next){console.log('RequestURL:',req.originalUrl);next();},function(req,res,next){console.log('RequestType:',req.method);next();});错误处理中间件错误处理中间件与其他中间件定义类似,只是它采用4个参数而不是3个,其签名如下:(err,req,res,next)。app.use(function(err,req,res,next){console.error(err.stack);res.status(500).send('Somethingbroke!');});内置中间件express.static(root,[options])express.static是Express唯一的内置中间件。它基于serve-static,负责为Express应用程序中的静态资源提供服务。第三方中间件通过使用第三方中间件向Express应用程序添加更多功能。安装具有所需功能的节点模块并将其加载到应用程序中,可以在应用程序级别或在路由级别。事实上,我们创建的应用程序引入了两个第三方中间件,你可以在package.json中找到“dependencies”:{"body-parser":"~1.18.2","cookie-parser":"~1.4.3","debug":"~2.6.9","express":"~4.15.5","jade":"~1.11.0","morgan":"~1.9.0","serve-favicon":"~2.4.5"}其中body-parser和cookie-parser是两个第三方中间件流程管理器。我们在写程序的时候发现每次文件变化后,都需要在命令行停止当前服务,然后输入npmstart,非常麻烦。我们需要一个自动刷新工具。下面介绍一下pm2的安装:npminstallpm2-gd安装完成后,运行我们的程序:还记得我们之前说的npmstart启动路径没有pm2start./bin/www--watch[PM2]ApplyingactionrestartProcessIdonapp[www](ids:0)[PM2][www](0)?[PM2]流程成功启动┌──────────────┬──────┬────────────────┬──────────────────────────────┬──────────┬──────────────┬────────────┬────────────┐│应用名称│id│模式│pid│状态│重启│正常运行时间│cpu│内存|────────┼──────────┼──────┼──────────────────────────────────────────────────────────────────────────────┤│www│0│fork│14448│在线│0│0s│0%│8.6MB│电机│已启用│└──────────┴──────┴────────┴─────────┴──────────┴──────────────────────────────┴────────────────────────────┴────────────┴────────────────────────────────────┘使用`pm2show
