Javascript Meteor-缺少用户名Meteor.users.findOne();或者Meteor.users();
提交帖子后,当前用户似乎无法识别,用户名显示为空。提交html有{author}来显示写文章的用户 以下是我在控制台中键入以下内容时的结果: 1用户用户名 =>结果用户未定义。 2Meteor.users.find; =>LocalCollection.Cursor{collection:LocalCollection,sorter:null,_selectorId:undefined,matcher:Minimongo.matcher,skip:undefined…} 3 Meteor.users.findOne; =>对象{u id:P3ocCTTdvi2o3JApf,profile:Object} 与工作版本相比,请注意,我的版本缺少用户名 =>对象{u id:XHXPebzjg5LM5tNAu,配置文件:对象,用户名:Bruno} 在lib文件夹中的post.js集合中(与客户端和服务器共享),我有:Javascript Meteor-缺少用户名Meteor.users.findOne();或者Meteor.users();,javascript,meteor,Javascript,Meteor,提交帖子后,当前用户似乎无法识别,用户名显示为空。提交html有{author}来显示写文章的用户 以下是我在控制台中键入以下内容时的结果: 1用户用户名 =>结果用户未定义。 2Meteor.users.find; =>LocalCollection.Cursor{collection:LocalCollection,sorter:null,_selectorId:undefined,matcher:Minimongo.matcher,skip:undefined…} 3 Meteor.us
Meteor.methods({
postInsert: function(postAttributes) {
check(this.userId, String); //check(Meteor.userId(), String);
check(postAttributes, {
title: String,
message: String
});
var user = Meteor.user();
var post = _.extend(postAttributes, {
userId: user._id,
author: user.username
});
var postId = Posts.insert(post);
return {_id: postId};
},
在《发现流星》教程中也没有其他关于作者的参考资料,而且它很有效。但是我的不行。这个问题似乎是在我添加UserAccounts包之后开始的。或者可能是文件夹位置问题
更新[2015年5月11日]
我意识到,当使用Meteor附带的原始ui帐户时,它有用户名字段,因为{{>login}附带的注册链接使用用户名+密码。没有涉及电子邮件地址
另一方面,UserAccounts没有此用户名字段。它要么是电子邮件/pw,要么是社交登录。所以,也许有人会指导我如何将用户名作为单独的字段,或者从email/pw和社交网络按钮login/sign中派生出用户名作为开始?那我就试着从那里拉小提琴
用户帐户代码
路由器.js
在config.js服务器端下,您需要使用.s访问对象的属性,而不是空间
Meteor.users.findOne
您需要使用.s来访问对象的属性,而不是空间
Meteor.users.findOne
您提供的信息很少,无法发现您的问题。 也就是说,你是如何让你的用户进来的 请注意,OAuth注册不在创建的用户对象上提供用户名字段,也不提供仅基于电子邮件地址的密码注册。在这些情况下,user.username将是未定义的 我建议确保您的所有用户都获得一个profile.username,可能是利用一些Accounts.onLogin钩子或一些profile页面强制用户选择用户名
在此之后,您将扩展post元数据设置author:user.profile.username您只提供了很少的信息来发现您的问题。 也就是说,你是如何让你的用户进来的 请注意,OAuth注册不在创建的用户对象上提供用户名字段,也不提供仅基于电子邮件地址的密码注册。在这些情况下,user.username将是未定义的 我建议确保您的所有用户都获得一个profile.username,可能是利用一些Accounts.onLogin钩子或一些profile页面强制用户选择用户名
在此之后,您将从Useraccounts文档扩展post元数据设置author:user.profile.username,尝试以下操作:
if (Meteor.isServer){
Meteor.methods({
"userExists": function(username){
return !!Meteor.users.findOne({username: username});
},
});
}
AccountsTemplates.addField({
_id: 'username',
type: 'text',
required: true,
func: function(value){
if (Meteor.isClient) {
console.log("Validating username...");
var self = this;
Meteor.call("userExists", value, function(err, userExists){
if (!userExists)
self.setSuccess();
else
self.setError(userExists);
self.setValidating(false);
});
return;
}
// Server
return Meteor.call("userExists", value);
},
});
这将在登录/注册表单中添加用户名字段,并在注册新用户时检查用户名冲突
顶部是服务器代码,底部是公共代码,因此您可以将整个代码段放在project/lib/文件夹中,或者将该方法与其他方法放在一起,具体取决于您如何构建项目
使用以下命令使用户名字段首先显示在注册表表单上,而不是最后一个:
var pwd = AccountsTemplates.removeField('password');
AccountsTemplates.removeField('email');
AccountsTemplates.addFields([
{
_id: "username",
type: "text",
displayName: "username",
required: true,
func: function(value){
if (Meteor.isClient) {
console.log("Validating username...");
var self = this;
Meteor.call("userExists", value, function(err, userExists){
if (!userExists)
self.setSuccess();
else
self.setError(userExists);
self.setValidating(false);
});
return;
}
// Server
return Meteor.call("userExists", value);
},
minLength: 5,
},
{
_id: 'email',
type: 'email',
required: true,
displayName: "email",
re: /.+@(.+){2,}\.(.+){2,}/,
errStr: 'Invalid email',
},
pwd
]);
在Useraccounts文档中,尝试以下操作:
if (Meteor.isServer){
Meteor.methods({
"userExists": function(username){
return !!Meteor.users.findOne({username: username});
},
});
}
AccountsTemplates.addField({
_id: 'username',
type: 'text',
required: true,
func: function(value){
if (Meteor.isClient) {
console.log("Validating username...");
var self = this;
Meteor.call("userExists", value, function(err, userExists){
if (!userExists)
self.setSuccess();
else
self.setError(userExists);
self.setValidating(false);
});
return;
}
// Server
return Meteor.call("userExists", value);
},
});
这将在登录/注册表单中添加用户名字段,并在注册新用户时检查用户名冲突
顶部是服务器代码,底部是公共代码,因此您可以将整个代码段放在project/lib/文件夹中,或者将该方法与其他方法放在一起,具体取决于您如何构建项目
使用以下命令使用户名字段首先显示在注册表表单上,而不是最后一个:
var pwd = AccountsTemplates.removeField('password');
AccountsTemplates.removeField('email');
AccountsTemplates.addFields([
{
_id: "username",
type: "text",
displayName: "username",
required: true,
func: function(value){
if (Meteor.isClient) {
console.log("Validating username...");
var self = this;
Meteor.call("userExists", value, function(err, userExists){
if (!userExists)
self.setSuccess();
else
self.setError(userExists);
self.setValidating(false);
});
return;
}
// Server
return Meteor.call("userExists", value);
},
minLength: 5,
},
{
_id: 'email',
type: 'email',
required: true,
displayName: "email",
re: /.+@(.+){2,}\.(.+){2,}/,
errStr: 'Invalid email',
},
pwd
]);
不要包含图片,请尝试包含代码,可能还有回复的注释。当您直接在控制台中执行{{expr}}操作时,大括号无法解释对象文字,因此会变成代码块。这意味着它几乎和做expr完全一样。i、 e.您试图在控制台中访问的作者使用的是香草JavaScript,而不是meteor。@PaulS。我的错。让我删除{{expr}上的部分。至于代码,由于DeVooT没有抛出错误,我不确定代码的哪部分要考虑粘贴。我搜索了所有具有{{author}}或用户的部分,因此只粘贴了集合中的部分。您对从何处开始查找或使用其他工具等有何建议?请尝试在回答中包含代码和注释,而不是包含图像。当您直接在控制台中执行{{expr}}操作时,花括号将失败
因此,对象文字解释将变为代码块。这意味着它几乎和做expr完全一样。i、 e.您试图在控制台中访问的作者使用的是香草JavaScript,而不是meteor。@PaulS。我的错。让我删除{{expr}上的部分。至于代码,由于DeVooT没有抛出错误,我不确定代码的哪部分要考虑粘贴。我搜索了所有具有{{author}}或用户的部分,因此只粘贴了集合中的部分。您对从何处开始查找或使用其他工具等有何建议?很抱歉出现错误,您是正确的。安置,修改我的职位如上。有什么建议我应该在代码中查找问题吗?很抱歉出现了错误,您是正确的。安置,修改我的职位如上。有什么建议我应该在代码中查找问题吗?我使用的是UserAccounts:。以前,ui帐户将直接连接。这是否意味着UserAccounts需要手动连接?嗯,UserAccounts只不过是Accounts包提供的功能而已。它只是简单地调用Accounts.loginWith和类似的,就是这样。我不确定accounts ui是否会在基本包中添加更多功能:我会说不@splendiido ui accounts版本不需要accounts.loginWith或任何profile.username,登录正常。因此,我不确定需要为UserAccounts插入什么。请您提供一个更详细的描述,说明您正在做什么,以及您正在尝试实现什么?谢谢@splendido-我正在尝试实现UserAccounts。我意识到我可能遗漏了用户名字段,这解释了为什么最初的用户界面帐户版本有用户名字段,而我的用户帐户版本没有用户名字段。我需要了解如何在登录/注册中包含该字段,或者如何解决上述问题。没有其他错误消息,所以我自己也不确定还要写什么。我正在使用UserAccounts:。以前,ui帐户将直接连接。这是否意味着UserAccounts需要手动连接?嗯,UserAccounts只不过是Accounts包提供的功能而已。它只是简单地调用Accounts.loginWith和类似的,就是这样。我不确定accounts ui是否会在基本包中添加更多功能:我会说不@splendiido ui accounts版本不需要accounts.loginWith或任何profile.username,登录正常。因此,我不确定需要为UserAccounts插入什么。请您提供一个更详细的描述,说明您正在做什么,以及您正在尝试实现什么?谢谢@splendido-我正在尝试实现UserAccounts。我意识到我可能遗漏了用户名字段,这解释了为什么最初的用户界面帐户版本有用户名字段,而我的用户帐户版本没有用户名字段。我需要了解如何在登录/注册中包含该字段,或者如何解决上述问题。没有其他错误消息,所以我自己也不确定还要在这里写什么