我在Meteor.js中有这个方法“main.js - Server”。
Meteor.methods({
messageSent: function (message) {
var apiai = require('apiai');
var app = apiai("TOKEN");
var request = app.textRequest(message, {
sessionId: '<unique session id>'
});
request.on('response', function(response) {
console.log(response);
console.log(response.result.fulfillment.speech);
Meteor.wrapAsync(gateway.transaction.sale);
Messages.insert({
message: response.result.fulfillment.speech,
timestamp: new Date(),
username: 'gotoAndBot'
});
});
request.on('error', function(error) {
console.log(error);
});
request.end();
}
});
从api.ai得到答案并尝试将api.ai的答案添加到Collection中。
但这会返回错误:
错误:流星代码必须始终在光纤内运行。尝试使用Meteor.bindEnviorment包装传递给非Meteor库的回调。
这是由Messages.insert
行引起的。
答案 0 :(得分:1)
正如评论中已经建议的那样,答案是将回调包装在Meteor.bindEnvironment
中,以便它在附加了所有必要变量的光纤内运行。所以你的代码是:
Meteor.methods({
messageSent: function (message) {
var apiai = require('apiai');
var app = apiai("TOKEN");
var request = app.textRequest(message, {
sessionId: '<unique session id>'
});
request.on('response', Meteor.bindEnvironment(function(response) {
Messages.insert({
message: response.result.fulfillment.speech,
timestamp: new Date(),
username: 'gotoAndBot'
});
}));
request.on('error', function(error) {
console.log(error);
});
request.end();
}
});