首页 文章

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

提问于
浏览
0

我正在开始使用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处理程序:

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 .

连接看起来像这样:

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

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

祝你今天愉快! ;)

2 回答

  • 0

    假设您从客户端发送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
    
  • 2

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

    我从 req.body.name 获得了 Value

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

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

    所以我的前端(angular.js),表单和后端(node.js,express,mongoose)之间的工作流程似乎有效 . 现在我 POST 的值,但我在我的mongoDB中得到一个空对象 .

    {"_id":"543a50a974de6e2606bd8478","__v":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);
    

相关问题