Express node.js与mongoose CRUD奇怪的行为。

时间:2014-05-10 13:03:24

标签: node.js angularjs mongodb express mongoose

我开始使用NodeJS进行冒险。我选择带有mongoose数据库的快速Web框架。作为我的前端的一部分,我正在使用AngularJS。

首先是前端,基本形式args传递给/ api / user。

$scope.form = {};
  $scope.submitUser = function () {
    console.log($scope.form);
    $http.post('/api/user', $scope.form).
      success(function(data) {})
      .error(function(data) {});
  };

$ scope.form等于:

Object {name: "foo", surname: "bar", email: "foobar@bar.foo"} 

然后我们得到了后端,我从默认用户架构开始:

var userSchema = new mongoose.Schema({
  name : String,
  surname : String,
  email : String
});

var User = mongoose.model('User', userSchema);

api post handler:

app.post('/api/user', function (req, res) {
  User.create({
    name : req.name,
    surname : req.surname,
    done : false
    }, function(err, user) {
      if (err)
        res.send(err);
      res.json(user);
    });
});

而不是对象的结果只是__v:

的id
__v: 0
_id: "536e218351b1182d0f000001"

PS。这个是神奇的,我完全不知道为什么会这样: __v和_id之上的那些记录不会被保存在任何地方(显示集合,并且每个结果上的find()为null)。但是当我跑步时

User.find(function(err, users) {
  if (err)
    res.send(err)
  res.json(users);

我得到的记录很少(先前尝试传递此表单),其中包含__v和_id。

Connection看起来像这样:

var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost:1/test');

感谢您的任何提示,解释。抱歉我缺乏知识,但我真的很努力。

祝你有愉快的一天! ;)

2 个答案:

答案 0 :(得分:2)

假设您从客户端发送POST的正文(有效负载)中的json对象,服务器应该将该值作为req.body.name访问,而不是req.name

app.post('/api/user', function (req, res) {
    User.create({
        name : req.body.name,
        surname : req.body.surname,
        done : false
    }, function(err, user) {
      if (err)
        res.send(err);
      res.json(user);
    });
});

确保将身体解析器中间件传递给表达:

var express = require('express')
var app = express()
app.use(express.bodyParser());  // for express 3.x

或表达4.x

var express    = require('express')
var bodyParser = require('body-parser')
var app = express()
app.use(bodyParser());  // for express 4.x

答案 1 :(得分:0)

在我的情况下,它不起作用。为什么呢?

我从 req.body.name

获取值

如果我记录 console.log(req.body.name); 我在控制台上获取值。

POST: 
{ name: 'typing any name', status: null }
typing any name

因此我的前端(angular.js),表单和后端(node.js,express,mongoose)之间的工作流似乎有效。现在我 POST 这个值,但是我的mongoDB中有一个空对象。

<强> {&#34; _id&#34;:&#34; 543a50a974de6e2606bd8478&#34;&#34; __ V&#34;:0}

app.post('/api/offers', function (req, res){
var offer;
console.log("POST: ");
console.log(req.body);
console.log(req.body.name);
offer = new OfferModel({
 name: req.body.name,
 value: req.body.value,
 title: req.body.title,
 content: req.body.content,
});
offer.save(function (err) {
 if (!err) {
    return console.log("created offer" + req.body.name);
  } else {
    return console.log(err);
  }
});
 return res.send(offer);
});

以下是模型:

var offerSchema = mongoose.Schema({

    offer            : {
            name        : String,
            value       : String,
            title       : String,
            content     : String,
            image       : String,
            start       : String,
            end         : String,
            targets     : String,
            beacons     : String,
            published   : String
    }
 });
 var OfferModel = mongoose.model('Offer', offerSchema);