2015-01-16 1 views
2

이러한 종류의 기능이 웹 응용 프로그램에서 매우 흔한 것처럼 느껴지더라도 답변을 찾을 수 없었던 문제가 있습니다. 나는 sails.js와 웹 개발에 대해 상당히 새롭기 때문에, 잘못된 용어 나 무언가를 사용하고 있다면 저를 고쳐주십시오.전체 청사진을 재정의하지 않고 Sails.js의 청사진 기능을 확장하는 방법은 무엇입니까?

sails.js 청사진의 기본 기능을 변경하려고합니다. 특히 '우선'을 먼저 찾아야합니다. 나는 모델을 가지고 있는데, Book이라고 부르 자. 그것은 'user'라는 속성을 가지고있다. 물론 이것은 사용자와 관련이있다. localhost : [port]/book의 결과를 필터링하여 데이터베이스에있는 모든 책을 표시하지 않고 현재 로그인 한 사용자가 소유자 인 책만 표시하도록했습니다.

지금까지는 정책이 답이 될지 확인해 보았지만 매우 바이너리 '예/아니오'결과를 생성하고 필터링에 사용할 수없는 것 같습니다. 그런 다음 BookController에서 기본 find 액션을 재정의하려고 시도했지만 어떤 청사진의 소스 코드를 완전히 이해하지 못했기 때문에 몇 가지 유용한 기능을 무시하고 있습니다. 그런 다음 답변 Adding missing request parameter before persistance in Sails.JS을 확인하고 URL 쿼리 매개 변수로 소유자를 추가하려고 시도했지만 routes.js에서 현재 로그인 한 사용자에게 액세스 할 수 없다는 것을 알았습니다. 아이디어는 어쨌든 시작부터 운명에 틀린 것 같습니다.

어쨌든이 문제를 해결할 현명한 방법이 있는지 궁금합니다.

답변

2

정책 내에서 매개 변수를 설정할 수 있습니다. bookController.find에서 실행되는 정책을 만들고이를 사용자 ID

를 추가해야 당신의 청사진이 실행될 때, 그것은 다른과 그 사용자 ID를 병합합니다 다음

req.options.where.user = req.session.userId 

(사용자의 설정에 따라 다름) 쿼리 속성은 params에 전달됩니다.

이것은 처음 시작하는 예입니다. 당신은 자동으로이 방법은

module.exports.policies = {'book.find':'attachUser'} 

API/정책/attachUser.js을 사용자를 연결뿐만 아니라에 생성하고 업데이트

설정/policies.js 확장 할 수 있습니다

module.exports = function(req, res, next) { 
    if(!req.options.where) req.options.where = {}; 
    req.options.where.user = req.session.userId 
} 
+0

좋아 , 시도한이 작동하지 않는 - 나는 '속성을 설정할 수 없습니다'정의되지 않은 사용자 '. 'req.options'는'attachUser' 정책에서'console.log (req.where)'로 체크 한 속성이 전혀없는 것처럼 보입니다. :/ – Fissio

+0

이제는 작동하도록 관리하고 대신'req.query.user = req.session.userId'를 사용하십시오. – Fissio

+0

당신의 방법은 작동 할 것이지만, 누군가가 body에 userId를 첨부한다면 req.query.user는 충돌 할 것입니다. 그냥 그것을 조심해야합니다. 단순히 "어디서"개체를 정의하여 해결하면 문제가 해결되지 않습니다. 나는이를 반영하기 위해 그것을 편집했다. – Meeker