【问题标题】:data is not insert in mongodb数据未插入 mongodb
【发布时间】:2018-01-16 06:18:30
【问题描述】:

我是 nodejs 和 mongodb 的初学者。我正在使用 mongoose ORM 和模型将数据插入到集合中,但不插入。验证工作正常,但填充完整数据后未插入数据。我没有手动在数据库中创建集合。我应该在 mongodb 中手动创建集合还是在插入文档时自动创建。

产品控制器

var mongoose = require('mongoose');
var db = require('../config/db_config');
var Product = require('../models/product');
//var Product = mongoose.model('Products');
var productController = {};

productController.add = function(req, res) {
    var params = req.body;

    if(!params) {
        res.status(400).send({message: "Data can not be empty"});
    }

    var productData = new Product({
        product_name : params.product_name,
        price : params.price,
        category : params.category
    });

    console.log(productData);

    productData.save(function(err, product) {
        if (err){
          res.status(400).send({message:'Unable to save data! ' + err});
        }else{
            res.status(200).send({message:'Data has been saved! ' + product });
        }
    });
};

module.exports = productController;

模型代码在这里

var mongoose = require('mongoose');
var db = require('../config/db_config');
var Schema = mongoose.Schema;

var productSchema = new Schema({

  product_name: { type: String, required:  'Product name cannot be left blank.' },

  price:    { type: String,     required:  'Product price cannot be left blank.'},

  category: { type: String ,    required:  'Product category cannot be left blank'},

  updated_at : {type: Date, default: Date.now}

});

module.exports = mongoose.model('Products', productSchema);

路由文件代码在这里:

var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
var Product = require('../models/product.js');
var productsController = require('../controllers/productsController');

router.post('/add',productsController.add);

module.exports = router;

数据库配置文件

var mongoose = require('mongoose');

mongoose.Promise = global.Promise;

var db = mongoose.createConnection('mongodb://localhost:27017/nodeweb', function(err,db){
    if(err){
        throw err;
        console.log(err);
    } else {
        console.log('Successfully connected to database!');
    }
});
module.exports = db;

我有插入控制器、模型和路由文件代码。

【问题讨论】:

  • 错误是什么?
  • @Bunny 错误:Route.get() 需要回调函数但在 Route.(匿名函数) [as get] (/var/www/html/nodejs/nodeweb/ node_modules/express/lib/router/route.js:202:15)
  • @OmodemiladeBamgbose 我已将必需更改为必需,但仍然无法正常工作。
  • 你能展示一下整个路由器文件吗?似乎错误在那里。
  • @ArtemBardachov var express = require('express'); var router = express.Router(); var 猫鼬 = 要求('猫鼬'); var Product = require('../models/product.js'); var productsController = require('../controllers/productsController'); router.get('/products',productsController.products); router.post('/add',productsController.add); module.exports = 路由器;

标签: node.js mongodb express mongoose


【解决方案1】:

请更正你的方法-

控制器功能

exports.add = function(req, res) {
  var new_product = new Products(req.body);  
   // you have define Products not Product
  console.log(new_product);
  new_product.save(function(err, product) {
    console.log('add data');
    if (err){
      res.send(err);
    }else{
        res.json(product);
    }
  });

};

对于节点 js 的良好实践 - 我认为您可以从 express-app-generator 开始

这有助于制作简单的路由,具有通用响应和带有记录器的内置快速中间件。

【讨论】:

  • 我用过 var Product = mongoose.model('Products');在控制器文件中。所以我不能写产品
【解决方案2】:

我已经解决了问题。数据库连接使用 connect 方法。

mongoose.connect('mongodb://localhost:27017/nodeweb', {useMongoClient: true}, function(err,db){
    if(err){
        throw err;
        console.log(err);
    } else {
        console.log('Successfully connected to database!');
    }
});

【讨论】:

    猜你喜欢
    • 2020-01-02
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 2020-01-31
    • 2019-08-03
    • 2018-06-14
    • 2020-05-03
    相关资源
    最近更新 更多