express基本路由
const express = require('express')
const app = express()
app.get('/', function (req, res) {
res.send('hello, express')
})
app.get('/users/:name', function (req, res) {
res.send('hello, ' + req.params.name)
})
app.listen(3000)
req.query
: 解析後的 url 中的querystring
,如?name=haha
,req.query 的值爲{name: 'haha'}
req.params
: 解析 url 中的佔位符,如/:name
,訪問/haha
,req.params 的值爲{name: 'haha'}
req.body
: 解析後請求體,需使用相關的模塊,如 body-parser
,請求體爲{"name": "haha"}
,則 req.body 爲 {name: 'haha'}
app.post('/',function(req,res))
獲得post請求
app.all('/',function(req,res))
獲得所有(包括get和post)請求
路徑使用正則表達式
// 匹配任何路徑中含有 a 的路徑:
app.get(/a/, function(req, res) {
res.send('/a/');
});
// 匹配 butterfly、dragonfly,不匹配 butterflyman、dragonfly man等
app.get(/.*fly$/, function(req, res) {
res.send('/.*fly$/');
});
路由句柄
app.get('/example/b', function (req, res, next) {
console.log('response will be sent by the next function ...');
next();
}, function (req, res) {
res.send('Hello from B!');
});
或在express.Router中使用路由句柄
routes/index.js
ar express=require('express')
var router=express.Router()
router.get('/',function(req,res,next){
//res.send('hello express')
console.log('next1')
next()
},function(req,res){
console.log('next2')
res.send('try again')
})
module.exports=router
index.js
var express=require('express')
var app=express()
var indexRouter=require('./routes/index')
var port=8000
//app.use('/',indexRouter)
//
//app.use('/users',usersRouter)
app.use('/',indexRouter)
app.listen(port)
console.log('listen at '+port)
使用回調函數數組處理路由:
var cb0 = function (req, res, next) {
console.log('CB0');
next();
}
var cb1 = function (req, res, next) {
console.log('CB1');
next();
}
var cb2 = function (req, res) {
res.send('Hello from C!');
}
app.get('/example/c', [cb0, cb1, cb2]);
express.Router
routes/index.js
:
var express=require('express')
var router=express.Router()
router.get('/',function(req,res){
res.send('hello express')
})
module.exports=router
routes/users.js
:
var express=require('express')
var router=express.Router()
router.get('/:name',function(req,res){
res.send('name:'+req.params.name)
})
module.exports=router
index.js
:
var express=require('express')
var app=express()
var indexRouter=require('./routes/index')
var usersRouter=require('./routes/users')
var port=8000
app.use('/',indexRouter)
app.use('/users',usersRouter)
app.listen(port)
console.log('listen at '+port)
程序作用同第一種一樣
routes(app)
更深一步的封裝:
routes/users.js
:
const express=require('express')
const router=express.Router()
router.get('/:name',function(req,res){
res.send(req.params.name)
})
routes/index.js
:
module.exports=function(app){
app.use('/',require(./users))
}