我想做的是:如果用户尝试使用已经在模型中注册的用户名或电子邮件注册,用户将得到错误。
当我试图注册未注册的用户名(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;
Ember文档-查找记录
find是一个异步方法,它将总是立即返回一个承诺(又名所有这些if
语句将执行)。使用烬数据来发现一个记录是否存在是多余的,没有意义。当用户输入系统中已经存在的用户名/电子邮件时,返回不同用户的用户信息是一个主要缺陷。这就是Ember Data的用途,记录管理,而不是这个记录是否存在。
话虽如此,只要在你的服务器上创建一个端点/available_user
,允许你发布用户名/电子邮件,它会返回一个200,结果如{result:'ok'}
或{result:'duplicate email'}
等。
var store = this.store;
...
var request = $.ajax({
url:'/available_user',
type:'POST',
data: getProperties
});
request.then(function(results){
if(results.ok){
record = store.createRecord('user', getProperties);
record.save();
}
});