Выпуск метеорного волокна?
Я вытаскиваю CSV, анализирую его в массив (прекрасно работает) и пытаюсь заполнить коллекцию Монго (не удается).
Я получаю следующую ошибку в терминале: "Ошибка: код метеора должен всегда выполняться внутри оптоволокна. Попробуйте обернуть обратные вызовы, передаваемые в неметеорные библиотеки, с помощью Meteor.bindEnvironment".
Вот мой код JS (сервер):
var order, orders, _i, _len;
CSV().from(fileAddress).to.array(function(data) {});
orders = data;
for (_i = 0, _len = orders.length; _i < _len; _i++) {
order = orders[_i];
Orders.insert({
clientId: order[0],
shipmentId: order[1],
orderId: order[2],
orderDate: order[3],
expectedDeliveryDate: order[4],
shipMethod: order[5],
customerName: order[6],
companyName: order[7],
address1: order[8],
address2: order[9],
city: order[10],
state: order[11],
zipCode: order[12],
country: order[13],
itemId: order[14],
quantity: order[15],
sku: order[16],
itemDescription: order[17],
productVariationDetails: order[18],
artfile: order[19],
customerMessage: order[20]
});
}
Если вы так склонны, вы также можете увидеть CoffeeScript:
CSV().from(fileAddress).to.array (data) ->
orders = data
for order in orders
Orders.insert({
clientId: order[0],
shipmentId: order[1],
orderId: order[2],
orderDate: order[3],
expectedDeliveryDate: order[4],
shipMethod: order[5],
customerName: order[6],
companyName: order[7],
address1: order[8],
address2: order[9],
city: order[10],
state: order[11],
zipCode: order[12],
country: order[13],
itemId: order[14],
quantity: order[15],
sku: order[16],
itemDescription: order[17],
productVariationDetails: order[18],
artfile: order[19],
customerMessage: order[20]
})
Я пытаюсь использовать Meteor bindEnvironment, указанный ниже. Вот текущее состояние:
Я вызываю метод сервера, используя событие шаблона, запускаемое пользователем:
Template.upload.events
'click #runMethod': () ->
Meteor.call('csv2Array', Session.get("fileUrl"), (error, result) ->
console.log result[0])
На сервере метод выглядит следующим образом:
Meteor.methods
'csv2Array': (fileUrl) ->
data = CSV().from(fileUrl).to.array Meteor.bindEnvironment((data) ->
console.log data[0], (error) ->
console.log "Error in bindEnvironment", error)
Когда я запускаю метод, я получаю эту ошибку:
I2047-12:18:10.287(-8)? Exception while invoking method 'csv2Array' Error: onException must be supplied
I2047-12:18:10.287(-8)? at Object.Meteor.bindEnvironment (packages/meteor/dynamics_nodejs.js:65)
I2047-12:18:10.288(-8)? at Meteor.methods.csv2Array (./csv.coffee:33:39)
I2047-12:18:10.288(-8)? at maybeAuditArgumentChecks (packages/livedata/livedata_server.js:1356)
I2047-12:18:10.288(-8)? at packages/livedata/livedata_server.js:541
I2047-12:18:10.288(-8)? at _.extend.withValue (packages/meteor/dynamics_nodejs.js:35)
I2047-12:18:10.288(-8)? at packages/livedata/livedata_server.js:540
I2047-12:18:10.289(-8)? at _.extend.withValue (packages/meteor/dynamics_nodejs.js:35)
I2047-12:18:10.289(-8)? at _.extend.protocol_handlers.method (packages/livedata/livedata_server.js:539)
I2047-12:18:10.289(-8)? at packages/livedata/livedata_server.js:439
1 ответ
Решение - Meteor.bindEnvironment:
var order, orders, _i, _len;
CSV().from(fileAddress).to.array(
Meteor.bindEnvironment(
function(data) {
orders = data;
for (_i = 0, _len = orders.length; _i < _len; _i++) {
order = orders[_i];
Orders.insert({
clientId: order[0],
//...
customerMessage: order[20]
})
}
},
function(error) {
console.log('Error in bindEnvironment:', error);
}
)
);