【问题标题】:How to add a new object with AngularJS and mongoDB如何使用 AngularJS 和 mongoDB 添加新对象
【发布时间】:2015-12-03 04:39:47
【问题描述】:

我正在使用 NodeJS、ANgularJS 和 MongoDB 以及 mongoose 来制作网站。我在 mongoDB 中添加对象时遇到了一些麻烦。对象的名称是 Todo

Todo 的模型如下:

var mongoose = require('mongoose');
var TodoSchema = new mongoose.Schema({
    name: String,
    password : String,
    completed: Boolean,
    note: String  
});

module.exports = mongoose.model('Todo', TodoSchema);

在控制器中我创建一个新的 Todo 并推送它

angular.module('app').controller('Connexion', ['$scope', 'Todos','$location', function($scope,Todos, $location) {

$scope.editing = [];
$scope.todos = Todos.query();

$scope.save = function() {
    var todo = new Todos({ name: "test", password: "test", completed: false });
        $scope.todos.push(todo);
        Todos.save($scope.todo);
}
}]);

这是我的 html 页面,每次单击按钮时,我都会创建一个新的待办事项并显示在屏幕上:

   <button ng-click="save()">Creer POST </button>

    <ul>
        <li ng-repeat="todo in todos">
            {{todo.name}}
            {{todo.password}}

       </li>
   </ul>

但是我有一个问题,新对象没有添加到数据库中。我该怎么做?

这是我在后台的文件:

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

var mongoose = require('mongoose');
var Todo = require('../models/Todo.js');

/* GET /todos listing. */
router.get('/', function(req, res, next) {
   Todo.find(function (err, todos) {
      if (err) return next(err);
           res.json(todos);
   });
});

/* POST /todos */
router.post('/', function(req, res, next) {
   Todo.create(req.body, function (err, post) {
      if (err) return next(err);
        res.json(post);
   });
});

/* GET /todos/id */
router.get('/:id', function(req, res, next) {
   Todo.findById(req.params.id, function (err, post) {
       if (err) return next(err);
          res.json(post);
    });
});


/* PUT /todos/:id */
router.put('/:id', function(req, res, next) {
   Todo.findByIdAndUpdate(req.params.id, req.body, function (err, post) {
       if (err) return next(err);
          res.json(post);
   });
});

/* DELETE /todos/:id */
router.delete('/:id', function(req, res, next) {
    Todo.findByIdAndRemove(req.params.id, req.body, function (err, post) {
     if (err) return next(err);
       res.json(post);
  });
});

module.exports = router;

如果这可以帮助这个后端文件 app.js

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var mongo = require('mongodb');
var Post = require('./models/Post.js');

var routes = require('./routes/index');

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/todoApp', function(err) {
   if(err) {
      console.log('connection error', err);
   } else {
      console.log('connection successful');
   }
});


var app = express();
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', function(req, res, next){
res.sendFile(__dirname + '/public/index.html');
});

var found = ['DB Connection not yet established.  Try again later.   Check the console output for error messages if this persists.'];


module.exports = app;

【问题讨论】:

  • 服务器上应该发生什么?用户浏览器上的 Angular 应用程序有什么? Mongoose 是用于服务器端数据库访问的 Node.js 模块,Angular 用于创建网站。我建议您阅读 MEAN 堆栈的工作原理。
  • 你能发布你的服务器中的代码吗?但是,在尝试使用 MEAN 堆栈(尤其是服务器部分)之前,最好先阅读一些有关 MEAN 堆栈的内容。
  • 你也可以发一下 Todos 服务代码吗?
  • 感谢您的回答伙计们我想在前端与 angularJS 和后端与 nodeJs 之间进行交互我在后端有一个文件,我正在使用 json,我编辑了我的发布。
  • 如何在 AngularJS 和 NodeJS 之间进行通信?

标签: angularjs node.js mongodb mongoose


【解决方案1】:

来自Todos.save($scope.todo);$scope.todo 未定义,因此这就是您可能无法保存任何内容的原因

【讨论】:

  • 是的,我尝试在 $scope.save = function() 中执行此操作,我将其放入:todo.$save(function(){ $scope.todos.push(todo) });但是todo不想去数据库
  • 你没有定义任何地方 $scope.todo,你有局部变量 todo 和数组 $scope.todos
  • 所以请尝试使用您的代码Todos.save(todo)Todos.save($scope.todos),具体取决于您实际要保存在数据库中的内容
  • 我需要新建一个函数$scope.todo?
  • 不,你可以保存你已经拥有的两个(对象或数组)中的任何一个
猜你喜欢
  • 2016-12-27
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 2016-06-19
  • 2018-06-05
相关资源
最近更新 更多