【问题标题】:data is not inserting into mongodb using node.js数据未使用 node.js 插入 mongodb
【发布时间】:2020-01-02 12:51:46
【问题描述】:

你好,我是 nodejs 的新手,并试图在 mongodb 中插入数据,但它没有插入,并且没有显示错误,并且在页面提交上显示“无法 POST /crud”,任何解决它的参考或建议(记住没有显示错误)

架构(Crud.js):

   const mongoose = require('mongoose');
   mongoose.connect('mongodb://localhost/node_web', {useNewUrlParser: true});

   var crudSchema = new mongoose.Schema({
      crud_name: {
         type: String
      },
      crud_email: {
         type: String
      },
      crud_mobile: {
         type: String
      }
  });

  mongoose.model('Crud', crudSchema );

创建.ejs:

   <form method="POST" action="/crud">
     <div class="form-group">
        <label for="inputAddress">Name</label>
        <input type="text" name="crud_name" class="form-control" id="inputAddress" placeholder="Enter your name">
     </div>
     <div class="form-group">
        <label for="inputAddress">Email</label>
        <input type="email" name="crud_email" class="form-control" id="inputAddress" placeholder="Enter your email">
     </div>
     <div class="form-group">
        <label for="inputAddress">Mobile</label>
        <input type="number" name="crud_mobile" class="form-control" id="inputAddress" placeholder="Enter your mobile">
     </div>
     <button type="submit" class="btn btn-primary">Submit</button>
   </form>

控制器:

    const express = require('express');
    var router = express.Router();
    const mongoose = require('mongoose');
    const Crud = mongoose.model('Crud');

    router.get('/',(req, res) => {
      res.render("crud", {crud : new Crud(), newCrud : true});
    });

    router.post('/', (req, res) => {
       if (true)
          insertRecord(req, res);
    });

    function insertRecord(req, res) {
        var crud = new Crud();
        crud.crud_name = req.body.crud_name;
        crud.crud_email = req.body.crud_email;
        crud.crud_mobile = req.body.crud_mobile;
        // Save methods
        crud.save((err, doc) => {
          if (!err)
             res.redirect('crud');
          else {
            console.log('Error during record insertions : ' + err);
          }
      });  
    }

db连接成功:

  var mongoose = require('mongoose');
  mongoose.connect('mongodb://localhost/node_web', {useNewUrlParser: true});

  var db = mongoose.connection;
  db.on('error', console.error.bind(console, 'connection error:'));
  db.once('open', function(err) {
  if (err) throw err;
     console.log('Successfully connected');
  });

【问题讨论】:

  • 你的 node.js 代码在哪里?我不确定,但是否可以请求模型文件在数据库中输入数据。你必须创建一个指向一个函数的路由,它会调用你的模式来发送数据,如果我错了,请告诉我这个
  • @sayalok 抱歉,我忘了添加控制器
  • @pro 你需要将保存对象传递给var crud = new Crud({a:req.body.a, b:req.body.b})这样的模型构造函数,并且路由定义也不正确,应该是router.post('/crud')
  • @ambianBeing 很抱歉,你能不能给我一个合适的答案,因为我是新手,不知道更多

标签: javascript node.js mongodb mongoose node-modules


【解决方案1】:

在您的控制器中,您应该通过将 URL 指定为来获取发布请求,

router.post('/crud', (req, res) => {
// Rest of the method..

});

【讨论】:

  • 还是同样的错误,现在我的代码是 router.post('/crud', (req, res) => { function insertRecord(req, res) { var crud = new Crud(); crud .crud_name = req.body.crud_name; crud.crud_email = req.body.crud_email; crud.crud_mobile = req.body.crud_mobile; // 保存方法 crud.save((err, doc) => { if (!err) res.redirect('crud'); else { console.log('记录插入时出错:' + err); } }); } });
  • 它只显示“无法 POST /crud”,console.log 中没有错误
  • @pro 你有没有像这样从控制器文件中导出你的路由 - module.exports = router;
  • 我在文件末尾写了这个
  • @pro 在您的主 app.js 文件中,您是否使用了路由 var crud = require('&lt;location _of_controller.js'); app.use('/crud', crud);
【解决方案2】:

创建一个 app.js 文件并将其添加到那里

const crudRoutes = require('./crudRoutes');
app.use('/crud',crudRoutes);

创建一个路由文件并执行以下操作

const express = require('express');
const crudController = require('./crudController')
const router = express.Router();
router.post('/crud', crudController.crud_process)
module.exports = router

在控制器文件中

 const mongoose = require('mongoose');
 const Crud = require('./crudModel') // ur schema file
 exports.crud_process = (req, res, next) => {
    // ur query 
  })

有关完整的详细信息,您可以在这里查看我的一个项目,我这样做是为了学习 nodejsapiproject

【讨论】:

  • 在 app.js 文件中我已经添加了 require('./models/Crud'); const crudController = require('./controllers/crudController');
  • 在你的控制器中尝试一个控制台,如果你在那里得到请求,请检查一下
  • nthing 即将进入控制台我写它:console.log(req.body);
【解决方案3】:
const express = require('express');
    var router = express.Router();
    const mongoose = require('mongoose');
    const Crud = mongoose.model('Crud');

    router.get('/',(req, res) => {
      res.render("crud", {crud : new Crud(), newCrud : true});
    });

    router.post('/', (req, res) => {
       if (true)
          insertRecord(req, res);
    });

    function insertRecord(req, res) {
        var crud = new Crud({
          crud_name:req.body.crud_name,
          crud_email : req.body.crud_email,
          crud_mobile : req.body.crud_mobile
});

        // Save methods
        crud.save((err, doc) => {
          if (!err)
             res.redirect('crud');
          else {
            console.log('Error during record insertions : ' + err);
          }
      });  
    }

【讨论】:

  • 尝试这样的事情。所以你得到它对你有帮助
猜你喜欢
  • 2011-08-30
  • 1970-01-01
  • 2015-11-20
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多