我想做的事情: 如果用户尝试注册已在模型中注册的用户名或电子邮件,则用户将收到错误。
当我尝试注册未注册的用户名(id)时,我收到此错误:
的 Error: Assertion Failed: You made a request for a user with id kevin, but the adapter's response did not have any data
我正在使用控制台和阅读文档进行调试,但我不确定为什么会出现此错误,请帮助我。
app/auth/register.js
中的
var AuthRegisterController = Ember.ObjectController.extend({
name: null,
username: null,
email: null,
password: null,
error: null,
actions: {
register: function(){
this.set('error', null);
var userInfo = this.getProperties('name', 'username', 'email', 'password');
...
if(this.store.find('user', userInfo.username)){
return this.set('error', 'The username is already registered.');
}
if(this.store.find('user', {email: userInfo.email})){
return this.set('error', 'The email is already registered.');
}
...
}
}
});
export default AuthRegisterController;
用户模型结构: app/models/user.js
var User = DS.Model.extend({
name: DS.attr('string'),
email: DS.attr('string'),
password: DS.attr('string'),
posts: DS.hasMany('post'),
});
User.reopenClass({
FIXTURES: [{
id: 'will',
name: 'Will Smith',
email: 'will@example.com',
password: 'password'
}]
});
export default User;
答案 0 :(得分:1)
find是一个异步方法,它将始终立即返回一个promise(也就是所有这些if
语句都会执行)。使用Ember数据来查找记录是否存在是过度的,并且没有意义。当用户输入已经在系统中的用户名/电子邮件时,为其他用户返回用户信息是一个主要缺陷。这就是Ember Data用于记录管理,而不是这个记录存在。
所有这一切,只需在您的服务器上/available_user
创建一个端点,允许您发布用户名/电子邮件,然后它会返回200,其结果包括{result:'ok'}
或{{1}等等。
{result:'duplicate email'}