如何在 Fiber 中插入 Collection
How to insert in Collection within a Fiber
试图在数据库中创建一个新条目,但我不断收到关于我的代码不在纤程中的错误。我不知道可能是什么问题。我必须补充一点,我正在服务器端进行插入。这不是来自客户端的方法调用。
这是我的代码。
import {Meteor} from 'meteor/meteor';
import {Mongo} from 'meteor/mongo';
import SimpleSchema from 'simpl-schema';
export const Trxs = new Mongo.Collection('trx');
export const addTrx = (trxn, userId) => {
var date = new Date(trxn.date).valueOf();
var userId = userId;
var catID = trxn.category_id;
var amt = trxn.amount;
var trx_name = trxn.name;
console.log(trxn);
Trxs.insert({
date,
userId,
catID,
amt,
trx_name
});
}
这就是我遇到的错误。
Error: Meteor code must always run within a Fiber. Try wrapping
callbacks that you pass to non-Meteor libraries with
Meteor.bindEnvironment.
如果您的函数用作回调或在服务器上的回调中调用,那么它会失去 Meteor 环境的上下文。
在服务器上处理异步函数时经常会出现这种情况。出现上面的错误,是因为还有一个callMongo.Collection
方法(不是原始的Mongo调用,而是根据Meteor环境改写的)
因此您需要使用 Meteor.bindEnvironment
将其包装起来。您可以轻松重现:
trx.js
import {Mongo} from 'meteor/mongo';
export const Trxs = new Mongo.Collection('trx');
export const addTrx = Meteor.bindEnvironment((trxn, userId) => {
var date = new Date(trxn.date).valueOf();
var userId = userId;
var catID = trxn.category_id;
var amt = trxn.amount;
var trx_name = trxn.name;
Trxs.insert({
date,
userId,
catID,
amt,
trx_name
});
});
main.js
import {addTrx, Trxs} from "./modc";
setTimeout(function () {
console.log("call")
addTrx({
category_id: "12312321",
amount: 10000,
name: "foo",
}, '123123123')
}, 5000);
如果您要删除函数的 bindEnvironment
包装,main.js 中的代码将抛出与您收到的相同的错误。
进一步阅读的资源:
https://guide.meteor.com/using-npm-packages.html#bind-environment
https://docs.meteor.com/api/collections.html#Mongo-Collection
试图在数据库中创建一个新条目,但我不断收到关于我的代码不在纤程中的错误。我不知道可能是什么问题。我必须补充一点,我正在服务器端进行插入。这不是来自客户端的方法调用。
这是我的代码。
import {Meteor} from 'meteor/meteor';
import {Mongo} from 'meteor/mongo';
import SimpleSchema from 'simpl-schema';
export const Trxs = new Mongo.Collection('trx');
export const addTrx = (trxn, userId) => {
var date = new Date(trxn.date).valueOf();
var userId = userId;
var catID = trxn.category_id;
var amt = trxn.amount;
var trx_name = trxn.name;
console.log(trxn);
Trxs.insert({
date,
userId,
catID,
amt,
trx_name
});
}
这就是我遇到的错误。
Error: Meteor code must always run within a Fiber. Try wrapping callbacks that you pass to non-Meteor libraries with Meteor.bindEnvironment.
如果您的函数用作回调或在服务器上的回调中调用,那么它会失去 Meteor 环境的上下文。
在服务器上处理异步函数时经常会出现这种情况。出现上面的错误,是因为还有一个callMongo.Collection
方法(不是原始的Mongo调用,而是根据Meteor环境改写的)
因此您需要使用 Meteor.bindEnvironment
将其包装起来。您可以轻松重现:
trx.js
import {Mongo} from 'meteor/mongo';
export const Trxs = new Mongo.Collection('trx');
export const addTrx = Meteor.bindEnvironment((trxn, userId) => {
var date = new Date(trxn.date).valueOf();
var userId = userId;
var catID = trxn.category_id;
var amt = trxn.amount;
var trx_name = trxn.name;
Trxs.insert({
date,
userId,
catID,
amt,
trx_name
});
});
main.js
import {addTrx, Trxs} from "./modc";
setTimeout(function () {
console.log("call")
addTrx({
category_id: "12312321",
amount: 10000,
name: "foo",
}, '123123123')
}, 5000);
如果您要删除函数的 bindEnvironment
包装,main.js 中的代码将抛出与您收到的相同的错误。
进一步阅读的资源:
https://guide.meteor.com/using-npm-packages.html#bind-environment
https://docs.meteor.com/api/collections.html#Mongo-Collection