2014-07-22 5 views
1

내 sails.js 앱이 PHP 프로젝트에서 임베디드되어 있습니다. php는 돛 모델에 대한 일부 날짜를 생성합니다. beforeCreate 콜백 또는 일부 맞춤 메소드에서이 날짜를 가져 오는 방법을 찾을 수 없습니다. 두 모델 (PHP에서 돛을 & 모델에서)를 동기화하는 DB를 사용하고 싶지 않아요. 그리고 나는 원격 PHP 응용 프로그램에 날짜를 보내야합니다.sails.js : 원격 서버에서 모델 데이터 가져 오기

module.exports = { 
    index: function (req, res) {}, 

    create: function (req, res) { 
     if (!req.param('login')) 
      throw new Error('Login is undefined'); 
     if (!req.param('message')) 
      throw new Error('Initial message is undefined'); 
     var user, thread; 
     User.create({ 
      id: 1, 
      name: req.param('login'), 
      ip: req.ip 
     }).done(function (err, model) { 
      user = model; 
      if (err) { 
      return res.redirect('/500', err); 
      } 
      user.fetch(); // my custom method 
     }); 

     return res.view({ thread: thread }); 
     } 
    }; 

및 모델 : :

module.exports = { 

    attributes: { 

     id: 'integer', 

     name: 'string', 

     ip: 'string', 

     fetch: function (url) { 

      var app = sails.express.app; 
      // suggest this but unlucky :) 
      app.get('/path/to/other/loc', function (req, res, next) { 
       console.log(req, res) 

       return next() 
      }); 
     } 
    } 

}; 

UPD 내 솔루션

모델 :

sails.js 여기

내 컨트롤러 v.0.9.x
beforeCreate: function (values, next) { 

    var options = 'http://localhost:1337/test', 
     get = require('http').get; 

    get(options, function (res) { 

     res.on('data', function (data) { 

      _.extend(values, JSON.parse(data.toString())); 
      next(); 

     }); 

    }).on('error', function() { 

     throw new Error('Unable to fetch remote data'); 
     next(); 

    }); 

} 

답변

2

Yikes-- app.get은 필요한 곳과 아무 곳에도 없습니다. 이는 앱 내부의 경로 처리기를 묶는 것이며 원격 데이터 요청과는 관련이 없습니다. 이러지 마.

노드에서 원격 데이터를 가져 오는 가장 쉬운 방법은 Request library입니다. 먼저 npm install request을 사용하여 프로젝트 디렉토리에 설치하십시오. 그런 다음 모델 파일의 맨 위에 :

var request = require('request'); 

하고 fetch 방법

:

fetch: function(url, callback) { 

    request.get(url, function(error, response, body) { 
     return callback(error, body); 
    }); 

} 

fetch에 대한 추가 callback 매개 변수; 이것은 요청이 비동기식 조작이므로 필요합니다. 즉, fetch()에 대한 호출이 즉시 반환되지만 요청에 약간의 시간이 걸리고 완료되면 콜백 함수를 통해 결과가 다시 전송됩니다. fetch으로 보는 것은이 시점에서 request.get 주위의 래퍼입니다. 모델 메서드로 사용하는 것이 왜 필요한지 잘 모르겠지만 URL이 모델 인스턴스 내의 무언가를 기반으로했다면 말이됩니다.

+0

답장을 보내 주셔서 감사합니다. 내 방식은 require ('https')와 유사합니다. – shifteee

관련 문제