Koa의 맞춤형 미들웨어에 대해 알아보세요.

처음 Koa를 봤을 때 약간 .netcore 스타일 같은 느낌이 들었습니다. 미들웨어를 정의한다는 생각은 사실 요청하는 도중에 여러 가지 필터를 설정하는 것과 비슷합니다. 즉, 요청이 나를 통과해서 내가 처리할 수 있다는 것입니다. 원하는 대로 처리가 되지 않으면 다음 미들웨어로 넘어가고, WEB 서버와 관련된 일부 기능은 미들웨어에서 구현될 수 있다.
커스텀 미들웨어의 주요 목적은 미들웨어로 사용할 메소드를 정의하는 것입니다. 여기서는 myMiddleWare.js 파일을 정의합니다.

const myMiddleWare = async(ctx,next) => {
    
    
    ctx.body = "這是一個中間件測試";
    await next();
}
module.exports = {
    
    
    myMiddleWare
}

실제로 myMiddleWare에는 메소드가 있습니다. 이 메소드에는 ctx와 next라는 두 개의 매개변수가 있습니다. 이 두 매개변수는 고정되어 있습니다. 첫 번째 매개변수는 요청 및 응답과 같은 요청의 일부 컨텍스트 매개변수를 나타냅니다. Java의 Context와 같은 것입니다. , 일부 요청을 캡슐화하는 객체입니다. next는 다음 단계, 즉 다음 미들웨어를 호출하는 것을 수행하는 메서드입니다. 마지막으로 module.exports를 사용하여 모듈의 myMiddleWare 문법을 외부에서 참조할 수 있도록 내보냅니다.

const Koa = require('koa') // 引入koa
const router = require('./router/router')
const bodyparser = require('koa-bodyparser')
const {
    
     myMiddleWare } = require('./middleware/myMiddleWare')

const app = new Koa() // 声明实例

app.use(myMiddleWare);

app.use(bodyparser({
    
    
    enableTypes: ['json', 'form', 'text'],
     multipart: true // 是否支持 multipart-formdate 的表单
}));


//console.dir(router);
/**
 * router.routes() 启动路由
 * router.allowedMethods() 运行任何请求——get/post/put/delete等
 */
app.use(router.routes(), router.allowedMethods());



app.listen(3000)

console.log("nodejs start");

여기서는 다른 부분에 신경 쓸 필요가 없으며 다음 두 줄의 코드만 신경 쓰면 됩니다. 여기서 주의해야 할 점은 { myMiddleWare }의 myMiddleWare 이름을 아무렇게나 지정할 수 없다는 것입니다. js 파일의 내보내기 이름과 동일합니다. 이는 변수가 아닙니다. 올바른 이해는 내보낸 함수를 사용하는 것이므로 여기서는 myMiddleWare여야 합니다.

const {
    
     myMiddleWare } = require('./middleware/myMiddleWare')
app.use(myMiddleWare);

그럼 바꾸자 myMiddleWare.js의 내용을 이것으로 변경했습니다.

const myMiddleWare = async(ctx,next) => {
    
    
    ctx.body = "這是一個中間件測試";
    await next();
}
module.exports = myMiddleWare

이런 식으로 우리가 내보낸 것은 메서드이고 이제 myMiddle은 단지 변수이기 때문에 동일한 이름을 가질 필요가 없습니다.

const myMiddle = require('./middleware/myMiddleWare')
app.use(myMiddle);

테스트에서 next() 이전에 ctx.body='xxx' 출력이 있는 경우 나중에 미들웨어 출력이 있으면 후자가 이전 출력을 대체하는 것으로 나타났습니다.

Supongo que te gusta

Origin blog.csdn.net/weixin_36557877/article/details/129293667
Recomendado
Clasificación