我的sails.js应用程序嵌入在php项目中,其中php为sails模型生成一些日期。在beforeCreate回调或某些自定义方法中找不到获取此日期的方法。我不想使用db来同步2个模型(来自sails的模型和来自php的模型)。我需要向远程php应用程序发送一些日期。
sails.js v.0.9.x
这是我的控制器:
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我的解决方案
型号:
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();
});
}
答案 0 :(得分:2)
Yikes - app.get
远远不是您所需要的。这是绑定应用程序内部的路由处理程序,与请求远程数据无关。不要这样做。
在Node中获取远程数据的最简单方法是使用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);
});
}
请注意callback
添加的fetch
参数;这是必需的,因为请求是异步操作。也就是说,对fetch()
的调用将立即返回,但请求将花费一些时间,并且当它完成时它将通过回调函数发回结果。看到fetch
只是request.get
的包装,我不知道为什么有必要将它作为模型方法,但如果URL基于模型中的某些内容然后它会有意义。