因为在vue.js仿饿了么app中,用到了express路由,所以就学习了express的简单使用,并且记录此文章,来加深自己的印象。
安装
安装并且将express保存到依赖列表里面
npm install express --save
只是安装不添加到依赖列表里面,省了--save即可
npm install express
一个hello word实例
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)以及如何响应客户端的请求。
app.METHOD(path, [callback...], callback),
app 是 express 对象的一个实例,express()就是一个express的实例。
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。
-
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.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是一个特殊的方法,使用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。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。