【发布时间】:2015-08-09 09:11:35
【问题描述】:
我是堆栈新手,正在构建一个测试页面,以便在构建我的实际项目之前整理我的理解。现在,我只是试图接受用户输入,将其保存到数据库中,然后打印出来。数据应保存在基本的猫鼬模型中,测试。虽然所有路线都打开了,但它不会打印用户输入的内容,而是按以下格式打印内容:
{"_id":"55c3925b48b9dba0d896be40","__v":0}
我怀疑它与 index.js 中这个 sn-p 的第二行有关:
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 = '';
};
}
]);
我怀疑这是不了解 req 是什么类型的对象的问题,但我并不完全肯定。我该如何让这段代码以猫鼬模型中描述的格式保存数据?
【问题讨论】:
-
可能更容易分离关注点——例如,以隔离的方式开发/测试服务器端逻辑,仅使用
curl(或准系统网页)将数据发布到它。然后专注于之后的角度/客户端代码。我确实认识到 JSON 中的“_id”键值对:它是在将新文档插入 MongoDB 时自动生成的文档 id,因此显然正在插入一些东西,至少 -
这绝对是 POST 错误。我可以进入 mongo shell 并且肯定正在创建文档。某处来自 $scope 的信息不会进入 $save;我只是不太确定在哪里。
-
@lispHK01,刚刚用curl添加了一个文档,它没有保存我使用的任何属性,而是以{id,v}的格式保存--所以在POST方法中本身。
-
如果我明确定义 test (即 var test = new Test ({"name":"test"});) 它确实保存了属性,所以它是 req.body 语句导致问题。
-
hmm,我唯一能想到的可能是
req.body的值需要被解析——即,确保可能看起来像“name=foo”的原始正文被转换为真正的 JavaScript 对象,例如{name: 'foo'},当它被传递到Test构造函数时。
标签: angularjs node.js mongodb mongoose