由于在vue.js仿饿了么app中,用到了express路由,因此就学习了express的简单使用,而且记录此文章,来加深本身的印象。html
安装而且将express保存到依赖列表里面vue
npm install express --save
只是安装不添加到依赖列表里面,省了--save便可web
npm install express
var express = require('express'); var app = express(); app.get('/user',function(req,res) { res.end('hello word'); }) var server = app.listen(3000, function () { var host = server.address().address; //ip地址 var port = server.address().port; //端口号 console.log('Example app listening at', host, port); });
上面的代码中引入了express,而且实例化了一个app变量,初始化了一个get请求是http://localhost:3000/user请求,这个请求返回的是hello word,这个是一个简单的路由正则表达式
路由是指如何定义应用的端点(URIs)以及如何响应客户端的请求。express
app.METHOD(path, [callback...], callback),npm
app 是 express 对象的一个实例,express()就是一个express的实例。json
METHOD 是一个 HTTP 请求方法,express定义了以下请求的方法: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。api
path 是服务器上的路径, 这个路径是咱们本身定义的,即访问的url;能够是字符串,正则表达式。服务器
// get请求根路径 app.get('/',function(req,res) {}) // get请求根路径 /user app.get('/user',function(req,res) {}) // 匹配以user结尾的。 app.get('/.*user$/',function(req,res) {})
callback 是当路由匹配时要执行的函数,callback能够有多个,callback的参数有req,res,当多个callback是有一个next参数的,若是只有一个callback能够省略next参数。app
app.get('/user/:id', function (req, res,next) { if(req.params.id==0){ next('route') } next(); },function (req,res) { res.send('Hello World!'); }); app.get('/user/:id', function (req, res) { res.end('Hello user!'); });
next()表示执行下一个回调函数,next('route'):略过下面的回调函数直接执行下一个路由。上面的例子,当咱们在页面输入http://localhost:3000/user/0
,输出的是Hello user!,其余的都是输出res.send('Hello World!')
app.all是一个特殊的方法,使用app.all方法,对于任何method的请求都会执行。
app.use(express.static('js'));
在当前目录下面有一个js文件,里面有一个index.js和router.js,咱们启动服务的时候,能够直接访问http://localhost:3000/index.js,这就是express的托管静态资源
中间件(Middleware) 是一个函数,它能够访问请求对象(request object (req)), 响应对象(response object (res)), 和 web 应用中处于请求-响应循环流程中的中间件,通常被命名为 next 的变量。
应用级中间件绑定到 app 对象 使用 app.use() 和 app.METHOD(), 其中, METHOD 是须要处理的 HTTP 请求的方法,例如 GET, PUT, POST 等等,所有小写。
例如:
//定义中间件 router.use(function timeLog(req, res, next) { console.log('Time: ', Date.now()); next(); }); // 定义网站主页的路由 router.get('/', function(req, res) { res.send('Birds home page'); }); // 定义 about 页面的路由 router.get('/about', function(req, res) { res.send('About birds'); })
上面的例子中,router.use定义了一个中间件,不管访问根路由和about路由,都会执行中间件,中间件经过 next() 方法将控制权交给下一个中间件或者路由。
路由中间件和应用中间件同样,只是路由中间件绑定的是express.Router();使用 router.use() 加载。
var app = express() var appData=require('../data.json'); var seller=appData.seller; //定义路由中间件 var appRouter=express.Router(); appRouter.get('/seller',function(req,res){ res.json({ errno:0, data:seller }) }) //加载路由中间件 app.use('/api',appRouter);
经过get方式访问 http://localhost:2000/api/seller,就能访问到返回的json对象,包含erron和data。