Express 快速入门:路由、中间件、静态托管与模板引擎实战指南

Express 快速入门:路由、中间件、静态托管与模板引擎实战指南 Express 快速入门:路由、中间件、静态托管与模板引擎实战指南目录一、特色1、Web 应用2、API3、性能二、安装三、Hello world 实例四、路由1、路由方法module.exports 和 exports使用的区别2、路由路径3、路由句柄4、响应方法5、app.route()6、express.Router五、利用 Express 托管静态文件六、使用中间件1、应用级中间件2、路由级中间件3、错误处理中间件4、内置中间件5、第三方中间件七、在 Express 中使用模板引擎art-template1、Install2、Example3.token基于 Node.js 平台,快速、开放、极简的 web 开发框架。$npminstallexpress--save一、特色1、Web 应用Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用。2、API丰富的 HTTP 快捷方法和任意排列组合的 Connect 中间件,让你创建健壮、友好的 API 变得既快速又简单。3、性能Express 不对 Node.js 已有的特性进行二次抽象,我们只是在它之上扩展了 Web 应用所需的基本功能。二、安装首先假定你已经安装了 Node.js,接下来为你的应用创建一个目录,然后进入此目录并将其作为当前工作目录。$mkdirmyapp $cdmyapp通过 npm init 命令为你的应用创建一个 package.json 文件。 欲了解 package.json 是如何起作用的,请参考 Specifics of npm’s package.json handling。$npminit此命令将要求你输入几个参数,例如此应用的名称和版本。 你可以直接按“回车”键接受默认设置即可,下面这个除外:entry point:(index.js)键入 app.js 或者你所希望的名称,这是当前应用的入口文件。如果你希望采用默认的 index.js 文件名,只需按“回车”键即可。接下来安装 Express 并将其保存到依赖列表中:$npminstallexpress--save如果只是临时安装 Express,不想将它添加到依赖列表中,只需略去 --save 参数即可:$npminstallexpress安装 Node 模块时,如果指定了 --save 参数,那么此模块将被添加到 package.json 文件中 dependencies 依赖列表中。 然后通过 npm install 命令即可自动安装依赖列表中所列出的所有模块。三、Hello world 实例接下来,我们一起创建一个基本的 Express 应用。注意:这里所创建是一个最最简单的 Express 应用,并且仅仅只有一个文件 — 和通过 Express 应用生成器 所创建的应用_完全不一样_,Express 应用生成器所创建的应用框架包含多 JavaScript 文件、Jade 模板和针对不同用途的子目录。进入 myapp 目录,创建一个名为 app.js 的文件,然后将下列代码复制进去:varexpress=require('express');varapp=express();app.get('/',function(req,res){res.send('Hello World!');});varserver=app.listen(3000,function(){varhost=server.address().address;varport=server.address().port;console.log('Example app listening at http://%s:%s',host,port);});上面的代码启动一个服务并监听从 3000 端口进入的所有连接请求。他将对所有 (/) URL 或 路由 返回 “Hello World!” 字符串。对于其他所有路径全部返回 404 Not Found。req (请求) 和 res (响应) 与 Node 提供的对象完全一致,因此,你可以调用 req.pipe()、req.on(‘data’, callback) 以及任何 Node 提供的方法。通过如下命令启动此应用:$nodeapp.js然后在浏览器中打开 http://localhost:3000/ 并查看输出结果。四、路由路由是指如何定义应用的端点(URIs)以及如何响应客户端的请求。路由是由一个 URI、HTTP 请求(GET、POST等)和若干个句柄组成,它的结构如下: app.METHOD(path, [callback…], callback), app 是 express 对象的一个实例, METHOD 是一个 HTTP 请求方法, path 是服务器上的路径, callback 是当路由匹配时要执行的函数。下面是一个基本的路由示例:varexpress=require('express');varapp=express();// respond with "hello world" when a GET request is made to the homepageapp.get('/',function(req,res){res.send('hello world');});1、路由方法路由方法源于 HTTP 请求方法,和 express 实例相关联。下面这个例子展示了为应用跟路径定义的 GET 和 POST 请求:// GET method route// 对网站首页的访问返回 "Hello World!" 字样app.get('/',function(req,res){res.send('Hello World!')})// 网站首页接受 POST 请求app.post('/',function(req,res){res.send('Got a POST request')})// /user 节点接受 PUT 请求app.put('/user',function(req,res){res.send('Got a PUT request at /user')})// /user 节点接受 DELETE 请求app.delete('/user',function(req,res){res.send('Got a DELETE request at /user')})Express 定义了如下和 HTTP 请求对应的路由方法:get, post, put, head, delete, options, trace, copy, lock, mkcol, move, purge, propfind, proppatch, unlock, report, mkactivity, checkout, merge, m-search, notify, subscribe, unsubscribe, patch, search, 和 connect。有些路由方法名不是合规的 JavaScript 变量名,此时使用括号记法,比如: app[‘m-search’](‘/’, function …app.all() 是一个特殊的路由方法,没有任何 HTTP 方法与其对应,它的作用是对于一个路径上的所有请求加载中间件。在下面的例子中,来自 “/secret” 的请求,不管使用 GET、POST、PUT、DELETE 或其他任何 http 模块支持的 HTTP 请求,句柄都会得到执行。app.all('/secret',function(req,res,next){console.log('Accessing the secret section ...')next();// pass control to the next handler})module.exports 和 exports使用的区别module.exports的使用如下:constuseController=(res,req)={req.send('index useController')}module.exports=useController;解构为:constuseController=require('../controllers/userController')exports的使用如下:constuseController=(res,req)={req.send('index useController')}exports.useController=useController;解构如下:变量名要加上双括号const{useController}=require('../controllers/userController')2、路由路径路由路径和请求方法一起定义了请求的端点,它可以是字符串、字符串模式或者正则表达式。Express 使用 path-to-regexp 匹配路由路径,请参考文档查阅所有定义路由路径的方法。 Express Route Tester 是测试基本 Express 路径的好工具,但不支持模式匹配。查询字符串不是路由路径的一部分。使用字符串的路由路径示例: