2014-01-27 4 views
0

req.badRequest('some reason here')과 같은 일부 함수를 으로 표현하고 싶었지만 그렇지 않았습니다. 나는 stackoverflow 대답 here 에서이 접근법을 사용합니다.app.use에서 defiend 함수가 높은 부하에서 오버 헤드를 가질 수 있습니까

한 가지 문제는 요청이 발생할 때마다 app.use 코드가 호출된다는 것입니다. 예에서

봐 :

app.use(function (req, res, next) { 
    console.log('I invoked'); 
    res.internalError = function() { 
    res.statusCode = 500; 
    log.error('Internal error(%d): %s', res.statusCode, 'some error'); 
    res.send({ error: true, description: 'Internal server error' }); 
    }; 
    res.badRequest = function(description, code) { 
    res.statusCode = 400; 
    res.send({ error: true, description: description, code: code}); 
    }; 
    next(); 
}); 

질문 :

내가 여러 요청 (use 함수가 호출 된 경우)에 res 객체와 무슨 모른다 아무도 설명 할 수 나를? 요청을 처리하는 데 오버 헤드가 발생할 수 있습니까? 어떻게하면이 구문 설탕을 다른 방법으로 얻을 수 있고 더 잘할 수 있을까요?

답변

1

Modifying Express.js Request Object을 참조하십시오.

reqres의 프로토 타입을 확장 할 수 있습니다. 여기에 내가 함께 휘저어 정말 간단한 예는 다음과 같습니다

var express = require('express') 

express.request.badRequest = function(res,description,code) { 
    res.statusCode = code; 
    res.send({error:true, description: description, code: code}) 
} 

var app = express() 

app.get('/', function(req,res) { 
    req.badRequest(res,'badz',400) 
}) 

app.listen(3001) 

한 차이가 수동으로이 기능에 res을 통과해야한다는 것입니다. 귀하의 예와 달리 클로저를 통해 res에 액세스 할 수있는 미들웨어 컨텍스트가 없기 때문입니다. 이렇게하면 모든 요청에 ​​대해 해당 기능을 할당하지 않아도됩니다.

이것이 좋은 연습인지 나쁜 운동인지에 관해서는 독자에게 연습 문제로 남겨 둡니다. ;) 나는 모든 요청에서 객체에 2 가지를 할당하는 것이 많은 오버 헤드가 아니라는 것을 발견했다.

+0

감사합니다. 좋은 설명. 나는 그것이 더 우아한 해결책이라고 생각한다. –

관련 문제