从Ember控制器获取API数据

时间:2015-06-21 06:17:38

标签: ember.js ember-data ember-cli

我是Ember新手,我正在尝试创建一个简单的应用程序来从API服务器获取记录。

目前我正在尝试查询

 this.store.find('validemail',{'email':'abc.gmail.com'}).then(function(response){
    console.log(response);
  });

//控制台登录浏览器

Class {query: Object, store: Class, manager: Class, isLoaded: true, meta: Object…}__ember1434866946710: "ember592"__ember_meta__: Object__nextSuper: undefinedcontent: (...)get content: GETTER_FUNCTION() {set content: SETTER_FUNCTION(value) {isLoaded: truemanager: Classmeta: Objectquery: Objectstore: Classtype: client@model:validemail:__proto__: Class

这是很多数据,但我无法理解它,我想要的只是成功:真实或成功:来自服务器API的方法。

这是我的Model类 从'ember-data'导入DS;

export default DS.Model.extend({
  success:DS.attr('boolean'),
  message: DS.attr('string')

});

和API方法

router.get('/validemails',function(req,res){
   console.log(req.query);
   var useremail=req.query.email;
   Hiveuser.find({'useremail':useremail},function(err,findResponse){
      if(!isEmptyObject(findResponse)){

          res.send({"validemail": {success: false,'message': 'User Already Exists'}});
      }
      else{
          res.send({"validemail": {success: true,'message':''}});
      }
   });


});

我意识到我做错了,因为Ember Inspector为模型类显示了0条记录。

我没有得到的是记录服务器响应显示从服务器发送了正确的响应,但不知何故,它被乱码到这个乱码文本到客户端。

注意:我甚至不打算在这个简单的用例中使用Ember模型,但是发送jQuery GET请求需要我将服务器IP硬编码到控制器中,因此必须使用适配器“路由”(没有双关语意图) :))

如果有一种方法我可以从控制器发送一个JSON请求,它将从适配器获取服务器ip,我非常想知道它。

由于

2 个答案:

答案 0 :(得分:2)

首先,当您执行store.find('modelName')时,Ember REST API Adapter需要一组模型作为响应。然后,承诺store.find解析对象数组,你必须得到第一个对象,看看是否success === true

this.store.find('validemail', {'email':'abc.gmail.com'}).then(function(validEmails){
  console.log(validEmails.get('firstObject.success')); // true || false
});

API方法:

router.get('/validemails',function(req,res){
   console.log(req.query);
   var useremail=req.query.email;
   Hiveuser.find({'useremail':useremail},function(err, findResponse){
      if(!isEmptyObject(findResponse)){
        res.send({"validemails": [{success: false, 'message': 'User Already Exists'}]});
      }
      else {
        res.send({"validemails": [{success: true, 'message':''}]});
      }
   });
});

答案 1 :(得分:1)

以下一行

.then(function(response) { console.log(response); })

正在“吃”回应。你需要从它返回response以沿着promises链向下传递它,然后将它传递给Ember,以便将其设置为模型:

this.store.find('validemail',{'email':'abc.gmail.com'}).then(function(response){
    console.log(response);
    return response;
});

或者可能更好,单独执行then

var response = this.store.find('validemail',{'email':'abc.gmail.com'}); 
response.then(function(response) { console.log(response); });
return response;