angular promise response.data是空的

时间:2016-05-05 14:53:16

标签: angularjs node.js promise angular-promise

工厂:

angular.module('clientApp').factory('Di', function($http) {
  return {
    create: function(dis){
      return $http.post('/dis', dis);
    }
});

控制器:

'use strict';

angular.module('clientApp').controller('AdminCtrl', function($scope, toastr, Di) {
    $scope.di = {};
    $scope.dis = [];

    $scope.add = function(){
      Di.create($scope.di).then(function(response){
        console.log(response, 'front data post')
        $scope.dis.push(response.data);
        $scope.di= {};
      });
    };
  });

当我在console.log()响应时,我在response.data中看到的唯一东西就是hashKey。我确实在response.config.data中看到了这个对象,但是从我在网上看到的,这只是我发送到数据库的原始对象,而不是返回的承诺,对吧?

数据保存到数据库中。

我做错了什么?我已经与其他承诺成功完成了类似的配置,但响应并不是我在这里所期待的。

API

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var DiSchema = new mongoose.Schema({
  name: { type: String, lowercase: true , required: true },
  photo: { type: String },
  email: { type: String, unique: true, lowercase: true },
  year: { type: Number},
  timestamp: { type : Date, default: Date.now },
  description: { type: String},
  location: { type: Array },
  social: {
    website: {type: String},
    facebook: {type: String },
    twitter: {type: String },
    instagram: {type: String }
  }
});

DiSchema.methods.create = function(o, cb){
  this.model.save(o, cb);
};

module.exports = mongoose.model('Di', DiSchema);

控制器:

'use strict';

var Di = require('../models/di');

exports.create = function(req, res){
  Di.create(req.body , user, function(err, di){
    console.log('req.body.di', req.body);
    res.send({di:di});
  });
};

路线:

var dis = require('../contollers/dis');
app.post('/dis', dis.create);

2 个答案:

答案 0 :(得分:2)

您的创建函数中有一个额外参数的拼写错误。

   exports.create = function(req, res){
  Di.create(req.body , function(err, di){
    console.log('req.body.di', req.body);
    res.send({di:di});
  });
};

答案 1 :(得分:0)

我认为你应该将你的承诺与范围绑定。 那能解决问题吗?你能试试吗?

$scope.add = function(){
  Di.create($scope.di).then(function(response){
    console.log(response, 'front data post')
    $scope.dis.push(response.data);
    $scope.di= {};
  }.bind($scope));
};