2014-03-30 2 views

답변

3

맞춤형 미들웨어를 구현하지 않고서는 Sails의 req.params.all()의 결과에 아무 것도 추가 할 수 없습니다. 요청시 구문 분석되고 사용자 수준 코드가 실행되기 전에 경로 처리기에 제공되므로 맞춤 미들웨어를 구현하지 않아도됩니다. 그러나 찾고있는 것이 기본 매개 변수 옵션 인 경우 Sails v0.10.x에서 req.options 해시를 사용할 수 있습니다. 당신이 청사진 "발견"에 대한 기본 제한을 설정하고자한다면, 예를 들어, 당신은 다음 사항을 할 수있는 당신의 /config/routes.js : 이러한 옵션에 대한

'/user': {blueprint: 'find', options: {limit: 10}} 

문서는 examine the source code이 볼 수있는 그 사이에, 곧 출시되는 청사진 옵션을 사용할 수 있습니다. 옵션을 확인

'/foo': {controller: 'FooController', action: 'bar', options: {abc: 123}} 

와 액션 코드 : 당신이 비슷한 방법으로 options을 사용할 수 있습니다

사용자 정의 컨트롤러 액션의 기본 PARAMS 들어

bar: function(req, res) { 

    var abc = req.param('abc') || req.options.abc; 

} 

이는 것이 바람직합니다 req.params.all을 사용하면 사용자가 제공 한 값 또는 기본값을 사용하고 있는지 여부를 알 수 있기 때문입니다. 당신이 정말로 직접 PARAMS을 변경하려는 경우, 당신은 /config/express.js 사용자 정의 미들웨어를 통해 수행 할 수 있습니다

customMiddleware: function(app) { 

    app.use(function(req, res, next) { 

     // Note: req.params doesn't exist yet because the router middleware 
     // hasn't run, but we can add whatever we want to req.query and it 
     // will stick as long as it isn't overwritten by a route param or 
     // something in req.body. This is the desired behavior. 
     req.query.foo = req.query.foo || 'bar'; 
     return next(); 

    }); 

} 
3

경우 사람이 필요할 수 있습니다.

나는 흐름이 컨트롤러에 도달하기 전에 URL의 일부분을 여러 언어에서 영어로 번역해야만했던 비슷한 문제를 해결해야했습니다.

우선 돛을 v0.10.5로 사용하고 있으며, 얼마나 오래 갈지 모르겠다.

미들웨어를 추가하는 권장 방법은 policy 또는 http 구성을 사용하는 것입니다. 처음에는 정책을 만들려고했으나 Sails는 정책 내에서 매개 변수를 변경할 수 없습니다. 그리고 이렇게 나는 http에 의지했다. 이 구성은 http 요청에 대한 자체 미들웨어를 추가 할 수있는 가능성을 제공합니다.

거기에서 당신은 당신이 당신의 자신의 기능을 추가 한 다음 order 배열로 삽입 할 수 있습니다에 어느 middleware: 속성을 확인할 수있는 것들 :

order: [ 
     'startRequestTimer', 
     'cookieParser', 
     'session', 
     'myRequestLogger', 
     'bodyParser', 
     'handleBodyParserError', 
     'compress', 
     'methodOverride', 
     'poweredBy', 
     '$custom', 
     '__your_function', 
     'router', 
     'www', 
     'favicon', 
     '404', 
     '500' 
    ] 

그래서 나는 router:route 이벤트를 구독 내 자신의 기능을 추가 그래서 params 배열이 이미 채워져 있는지 확인합니다.

이 하나가 내가 DB 삽입에 대한 모델에서 새 항목을 만들 싶습니다 컨트롤러 등의 예를 들어 나를 위해 작동
addRouterListener: function (req, res, next) { 
    sails.on('router:route', function (args) { 

     // Proceed to changing your params here 
     // It would also be wise to check the route or the controller 
     if (args.options.controller === 'x' && args.req.params['type']){ 
      args.req.params['type'] = translation[args.req.params['type']]; 
     } 

    }); 

    return next(); 
} 
1

:

var requestParams = req.params.all(); 
requestParams.newParameter = 'XYZ'; 
requestParams.whatever = '123'; 

그리고 당신은 모든 매개 변수를 필요로하는 곳에 requestParams 객체를 사용 + 추가 매개 변수.예 :

MyModel.create(requestParams, function(err, user) { 
    ... 
});