Javascript meteor插入函数中的this.userId未返回
我有以下代码,当我试图获取Javascript meteor插入函数中的this.userId未返回,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,我有以下代码,当我试图获取this.userId时,我似乎无法获取输入到数据库中的值。它通过pub sub在前端工作,不知道如何解决这个问题,如果我使用Meteor.userId(),我会收到一个错误,说它不能在发布函数中使用 import { Meteor } from "meteor/meteor"; import { Accounts } from "meteor/accounts-base"; import { LeadsCollection,
this.userId
时,我似乎无法获取输入到数据库中的值。它通过pub sub在前端工作,不知道如何解决这个问题,如果我使用Meteor.userId(),我会收到一个错误,说它不能在发布函数中使用
import { Meteor } from "meteor/meteor";
import { Accounts } from "meteor/accounts-base";
import {
LeadsCollection,
LeadsBuilderCollection,
} from "/imports/api/LeadsCollection";
import "/imports/api/leadsMethods";
import "/imports/api/leadsPublications";
const insertLead = (leadEmail) =>
LeadsCollection.insert({
email: leadEmail,
createdAt: new Date(),
userId: this.userId,
});
const insertLeadBuilderType = (leadsBuilder) =>
LeadsBuilderCollection.insert({ type: leadsBuilder });
const SEED_USERNAME = "admin";
const SEED_PASSWORD = "admin";
Meteor.startup(() => {
if (!Accounts.findUserByUsername(SEED_USERNAME)) {
Accounts.createUser({
username: SEED_USERNAME,
password: SEED_PASSWORD,
});
}
if (LeadsCollection.find().count() === 0) {
[
"First Lead",
"Second Lead",
"Third Lead",
"Fourth Lead",
"Fifth Lead",
"Sixth Lead",
"Seventh Lead",
].forEach(insertLead);
}
if (LeadsBuilderCollection.find().count() === 0) {
["Showroom Lead", "Phone Call Lead", "Website Lead"].forEach(
insertLeadBuilderType
);
}
});
this.userId
未以任何方式设置,因为此代码在启动时运行,而不是在对客户端的方法调用或发布的上下文中运行。因此,您需要明确用户ID:
const userId = Accounts.findUserByUsername(SEED_USERNAME)?._id ||
Accounts.createUser({
username: SEED_USERNAME,
password: SEED_PASSWORD,
});
然后,您需要将该userId
提供给您的insertLead
函数,例如:
...
].forEach(lead => insertLead(lead, userId));
并将功能更改为:
const insertLead = (leadEmail, userId) =>
LeadsCollection.insert({
email: leadEmail,
createdAt: new Date(),
userId,
});
旁注。您应该使用Meteor.settings作为种子用户名和默认密码。更好的方法是省略密码并发送邀请电子邮件。值得注意的是,目前它正在开发中,但我要补充一点,在与真人测试之前,用户的id不同是正常的,不同文档的id为1,2,3,4,它们不应该都是相同的用户ID,而且要长得多吗?这部分到底发生了什么
。_ID | |
我知道这是一个or语句和一个if语句,但是上下文中发生了什么。它是说如果用户ID存在,返回这个值,或者如果不返回createUservalue?奇怪的是,当我控制台userId常量时,我得到了正确的userId,但它插入了0,1,2…哦,我在insertLead函数上搞砸了现在一切正常:)