HTTP Post未连接角度

时间:2015-08-06 17:25:46

标签: angularjs node.js mongodb mongoose

我是新手,正在构建一个测试页面,以便在构建我的实际项目之前理清我的理解。现在,我只是尝试接受用户输入,将其保存到数据库并打印出来。数据应保存在基本的Mongoose模型中,测试。虽然所有路线都是开放的,但不是打印用户输入的内容,而是按以下格式打印:

{"_id":"55c3925b48b9dba0d896be40","__v":0}

我怀疑它与index.js中此代码段的第二行有关:

router.post('/survey', function(req, res, next) {
    var test = new Test(req.body);

    test.save(function(err,test) {
        if(err) {
            return next(err);
        }

        res.json(test);
    });
});

module.exports = router;

相关代码:

所有index.js:

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

//set up routes
var mongoose = require('mongoose');
var Test = mongoose.model('Test');

router.get('/survey', function(req, res, next) {
    Test.find(function(err, tests) {
        if(err) {
          return next(err);
        }

        res.json(tests);
    });
});

router.post('/survey', function(req, res, next) {
    var test = new Test(req.body);

    test.save(function(err,test) {
        if(err) {
            return next(err);
        }

        res.json(test);
    });
});

module.exports = router;

Tests.js(型号):

var mongoose = require('mongoose');

var TestSchema = new mongoose.Schema({
    'name': String,
});

module.exports = mongoose.model('Test', TestSchema);

角度代码的相关位:

routerApp.factory('tests', ['$http', function($http){
    var o = {
        tests: []
    };

    o.getAll = function() {
        return $http.get('/survey').success(function(data){
            console.log('get all sees data as:' + data);
            angular.copy(data, o.tests);
        });
    };

    o.create = function(test) {
        console.log('create sees test as' + test);
        return $http.post('/survey', test).success(function(data){
            o.tests.push(data);
            console.log('Data:' + data);
        });
    };

    return o;
}]);


routerApp.controller('FormCtrl', ['$scope', 'tests',
    function($scope, tests){
        $scope.test = tests.tests;

        $scope.addTest = function(){
            if(!$scope.text || $scope.text === '') { return; }
            tests.create({
                name: $scope.text
            });
            $scope.text = '';
        };
    }
]);

我怀疑这是一个不了解什么样的对象需求的问题,但我并不完全正面。我如何使这个代码以mongoose模型中描述的格式保存数据?

2 个答案:

答案 0 :(得分:0)

如果您在文档对象(res.json(test.toObject()))上调用.toObject(),则应该返回一个包含该文档中数据的普通对象。

答案 1 :(得分:0)

尝试console.log(req.body)。如果它是空的,那么在定义路由之前尝试在某处添加app.use(bodyParser.json())(并确保首先使用npm和require安装它。)

当您发布某种JSON时,默认情况下它在req.body中不可用。您需要bodyParser来解析传入的数据,并使其在req.body中可用。有关详细信息,请参阅https://medium.com/@adamzerner/how-bodyparser-works-247897a93b90