Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 保存不是一个函数_Node.js_Mongoose - Fatal编程技术网

Node.js 保存不是一个函数

Node.js 保存不是一个函数,node.js,mongoose,Node.js,Mongoose,JS: 我只是想用Mongoose向MongoDB添加一条记录 在谷歌上搜索了一番后,我找不到答案。我的.find和.findOne方法工作正常,但由于某些原因,我得到了错误任务。save不是一个函数。我做错了什么?您的可变任务是您之前定义的body对象: var express = require('express'); var router = express.Router(); // Mongoose var mongoose = require('mongoose'); var mon

JS:

我只是想用Mongoose向MongoDB添加一条记录

在谷歌上搜索了一番后,我找不到答案。我的.find和.findOne方法工作正常,但由于某些原因,我得到了错误任务。save不是一个函数。我做错了什么?

您的可变任务是您之前定义的body对象:

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

// Mongoose
var mongoose = require('mongoose');
var mongoosedb = 'DBURL';
mongoose.connect(mongoosedb);

var database = mongoose.connection;
database.on('error', console.error.bind(console, 'connection error:'));
database.once('open', function() {
  console.log('Mongoose is connected.');
});

var taskSchema = mongoose.Schema({
    name: String,
    isDone: Boolean
});

var Tasks = mongoose.model('Tasks', taskSchema);

// Get all tasks
router.get('/tasks', function(req, res, next) {
  Tasks.find(function(err, tasks) {
    if(err) {
      console.log('error');
      res.send(err);
    }
    res.json(tasks);
  });
});

// Get single task
router.get('/task/:id', function(req, res, next) {
  Tasks.findOne({_id: mongojs.ObjectId(req.params.id)}, function(err, task) {
    if(err) {
      res.send(err);
    }
    res.json(task);
  });
});

// Save task
router.post('/task', function(req, res, next) {
  var task = req.body;
  if(!task.title || !(task.isDone + '')) {
    res.status(400);
    res.json({
      "error": "Bad Data"
    });
  } else {
    task.save(function(err, task) {
      if(err) {
        res.send(err);
      }
      res.json(task);
    })
  }
});

// Delete task
router.delete('/task/:id', function(req, res, next) {
  Tasks.remove({_id: mongojs.ObjectId(req.params.id)}, function(err, task) {
    if(err) {
      res.send(err);
    }
    res.json(task);
  });
});

// Update task
router.put('/task/:id', function(req, res, next) {
  var task = req.body;
  var updTask = {};

  if (task.isDone) {
    updTask.isDone = task.isDone;
  }

  if (task.title) {
    updTask.title = task.title;
  }

  if (!updTask) {
    res.status(400);
    res.json({
      "error": "Bad Data"
    });
  } else {
    task.update({_id: mongojs.ObjectId(req.params.id)}, updTask, {}, function(err, task) {
      if(err) {
        res.send(err);
      }
      res.json(task);
    });
  }
});

module.exports = router;
如果要从中生成任务文档,请使用:

var task = req.body;
检查

您还将task.update与Tasks混淆。update

您的可变任务是您先前定义的body对象:

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

// Mongoose
var mongoose = require('mongoose');
var mongoosedb = 'DBURL';
mongoose.connect(mongoosedb);

var database = mongoose.connection;
database.on('error', console.error.bind(console, 'connection error:'));
database.once('open', function() {
  console.log('Mongoose is connected.');
});

var taskSchema = mongoose.Schema({
    name: String,
    isDone: Boolean
});

var Tasks = mongoose.model('Tasks', taskSchema);

// Get all tasks
router.get('/tasks', function(req, res, next) {
  Tasks.find(function(err, tasks) {
    if(err) {
      console.log('error');
      res.send(err);
    }
    res.json(tasks);
  });
});

// Get single task
router.get('/task/:id', function(req, res, next) {
  Tasks.findOne({_id: mongojs.ObjectId(req.params.id)}, function(err, task) {
    if(err) {
      res.send(err);
    }
    res.json(task);
  });
});

// Save task
router.post('/task', function(req, res, next) {
  var task = req.body;
  if(!task.title || !(task.isDone + '')) {
    res.status(400);
    res.json({
      "error": "Bad Data"
    });
  } else {
    task.save(function(err, task) {
      if(err) {
        res.send(err);
      }
      res.json(task);
    })
  }
});

// Delete task
router.delete('/task/:id', function(req, res, next) {
  Tasks.remove({_id: mongojs.ObjectId(req.params.id)}, function(err, task) {
    if(err) {
      res.send(err);
    }
    res.json(task);
  });
});

// Update task
router.put('/task/:id', function(req, res, next) {
  var task = req.body;
  var updTask = {};

  if (task.isDone) {
    updTask.isDone = task.isDone;
  }

  if (task.title) {
    updTask.title = task.title;
  }

  if (!updTask) {
    res.status(400);
    res.json({
      "error": "Bad Data"
    });
  } else {
    task.update({_id: mongojs.ObjectId(req.params.id)}, updTask, {}, function(err, task) {
      if(err) {
        res.send(err);
      }
      res.json(task);
    });
  }
});

module.exports = router;
如果要从中生成任务文档,请使用:

var task = req.body;
检查


您还将task.update与Tasks.update混淆。我认为您的任务创建不正确

首先,将您的模型和依赖项一起导入顶部,以便我们可以直接访问模型方法:

var newTask = new Tasks(task);
newTask.save(function(err, task) {
    if (err) {
        res.send(err);
    }
    res.json(task);
});
然后,在“保存任务代码”中,将其更改为:

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

// Mongoose
var mongoose = require('mongoose');
var mongoosedb = 'DBURL';
var Task = require('mongoose').model('Task');  // add your Task model
在设置当前任务创建时,您只是将其设置为req.body内容,而不是通过mongoose方法实际初始化实例

我个人喜欢用猫鼬承诺来代替,只是因为我更喜欢这种风格。但是,如果您已经通过将任务模型作为依赖项获取来访问它,您也可以这样做,如上所示:

// Save task
router.post('/task', function(req, res, next) {
  var task = new Task(req.body) // See http://mongoosejs.com homepage demo example for basic creation
  if(!task.title || !(task.isDone + '')) {
    res.status(400);
    res.json({
      "error": "Bad Data"
    });
  } else {
    task.save(function(err, task) {
      if(err) {
        res.send(err);
      }
      res.json(task);
    })
  }
});

无论如何,我希望这有帮助,让我知道这是否有效,如果没有,我会稍后再查看

我认为您的任务创建没有正确完成

首先,将您的模型和依赖项一起导入顶部,以便我们可以直接访问模型方法:

var newTask = new Tasks(task);
newTask.save(function(err, task) {
    if (err) {
        res.send(err);
    }
    res.json(task);
});
然后,在“保存任务代码”中,将其更改为:

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

// Mongoose
var mongoose = require('mongoose');
var mongoosedb = 'DBURL';
var Task = require('mongoose').model('Task');  // add your Task model
在设置当前任务创建时,您只是将其设置为req.body内容,而不是通过mongoose方法实际初始化实例

我个人喜欢用猫鼬承诺来代替,只是因为我更喜欢这种风格。但是,如果您已经通过将任务模型作为依赖项获取来访问它,您也可以这样做,如上所示:

// Save task
router.post('/task', function(req, res, next) {
  var task = new Task(req.body) // See http://mongoosejs.com homepage demo example for basic creation
  if(!task.title || !(task.isDone + '')) {
    res.status(400);
    res.json({
      "error": "Bad Data"
    });
  } else {
    task.save(function(err, task) {
      if(err) {
        res.send(err);
      }
      res.json(task);
    })
  }
});

无论如何,我希望这有帮助,让我知道这是否有效,如果没有,我会稍后再查看

“轰,”Bertrand Martel说了我要说的话,但由于某种原因,没有弹出更新的答案。没错=“轰,”Bertrand Martel说了我要说的话,但由于某种原因,没有弹出更新的答案。没错=