Express中app.use()用法
app.use(path,callback)中的callback既可以是router对象又可以是函数
app.get(path,callback)中的callback只能是函数
当一个路由有好多个子路由时用app.use(path,router)
koa2中app.use()用法
koa2中的app.use()只能用于注册中间件并且必须是生成器函数,反过来说app.use是用来注册koa2中间件的不再像express中的use用来注册路由。
//use 源代码
if (typeof fn !== 'function')
throw new TypeError('middleware must be a function!');
use(fn)中的fn不论是完整的中间件还是生成器函数都被注册到this.middlware这个数组中,并通过convert(fn)这个方法进行了转换,转换成async/await语法
中间件执行的时候传入我们的ctx也就是我们常用的上下文,另一个参数next指向数组的下一个中间件,到执行结束为止
对比写法
app.get("/home",callback)
app.get("/home/one",callback)
app.get("/home/second",callback)
app.get("/home/three",callback)
var express = require('express')
var router = express.Router()
router.get("/",(req,res)=>{
res.send("/")
})
router.get("/one",(req,res)=>{
res.send("one")
})
router.get("/second",(req,res)=>{
res.send("second")
})
router.get("/treen",(req,res)=>{
res.send("treen")
})
module.exports = router;
app.js导入
var express = require('express')
var router = require("./router")
var app = express()
app.use('/home',router) //router路由对象中的路由都会匹配到"/home"路由后面
app.get('/about', function (req, res) {
console.log(req.query)
res.send('你好,我是 Express!')
})
// 4 .启动服务
app.listen(3000, function () {
console.log('app is running at port 3000.')
})
app.use(express.static(‘public’));
为了提供对静态资源文件(图片,css,js文件)的服务,请使用Express内置的中间函数express.static.
传递一个包含静态资源的目录给express.static中间件用于立即开始提供文件。 比如用以下代码来提供public目录下的图片、css文件和js文件:
app.use(express.static(‘public’));
如果前台想请求后台public目录下images/08.jpg静态的图片资源
通过: http://localhost:3000/images/08.jpg
通过多次使用 express.static中间件来添加多个静态资源目录:
app.use(express.static('public'));
app.use(express.static('file'));
虚拟路径
为了给静态资源文件创建一个虚拟的文件前缀(文件系统中不存在),可以使用express.static函数指定一个虚拟的静态目录,如下:
app.use('/static', express.static('public'))
koa2中路由中间件注册
//route.js
var router = require('koa-router')
var r1 = router()
r1.get('/feedbacks/paramsQuery',async ctx=> {
ctx.body = {
code:1
}
})
module.exports = r1
//www.js
var koa = require('koa')
let myporte = require('./node')
var app = new koa()
app.use(myporte.routes())
app.listen(3008,function() {
console.log('3008 port监听成功')
})
对静态资源的处理koa也提供也中间件
const Koa = require('koa')
const path = require('path')
const static = require('koa-static')
const app = new Koa()
// 静态资源目录对于相对入口文件index.js的路径
const staticPath = './static'
app.use(static(
path.join( __dirname, staticPath)
))
app.use( async ( ctx ) => {
ctx.body = 'hello world'
})
app.listen(3000, () => {
console.log('[demo] static-use-middleware is starting at port 3000')
})