【问题标题】:Issue with Mongoose callbackMongoose 回调问题
【发布时间】:2015-09-08 18:24:33
【问题描述】:

我正在使用 mongoosejs 在我的数据库中插入数据。我正在尝试单独添加 save() 回调示例: new ModelName.save(saveData) 而不是以传统方式添加它。 new ModelName.save(function(err, model){...}

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

        var mongoose = require('mongoose');
        var userDetail = mongoose.model('user_details');

        //not working
        router.post('/', resgisterUser);

        function resgisterUser(req, res) {
            new userDetail({
                    fullName: req.body.fullName,
                    email: req.body.email,
                    contactNumber: req.body.contactNumber,
                    password: req.body.password
                })
                .save(saveUserDetails);
        }

        function saveUserDetails(err, newUser) {
            console.log(newUser)
            res.writeHead(200);
            res.end();
        }

       //working code

    function resgisterUser(req, res) {
        new userDetail({
                fullName: req.body.fullName,
                email: req.body.email,
                contactNumber: req.body.contactNumber,
                password: req.body.password
            })
            .save(function (err, newUser) {
                console.log(newUser)
                res.writeHead(200);
                res.end();
            });
    }

`

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    这里的问题是saveUserDetails 函数是在resgisterUser(req, res) 范围之外定义的,因此无法访问reqres 对象。

    应该这样做:

    var express = require('express');
    var router = express.Router();
    
    var mongoose = require('mongoose');
    var userDetail = mongoose.model('user_details');
    
    router.post('/', resgisterUser);
    
    function resgisterUser(req, res) {
        function saveUserDetails(err, newUser) {
            console.log(newUser)
            res.writeHead(200);
            res.end();
        }
    
        new userDetail({
            fullName: req.body.fullName,
            email: req.body.email,
            contactNumber: req.body.contactNumber,
            password: req.body.password
        })
        .save(saveUserDetails);
    }
    

    【讨论】:

      【解决方案2】:

      尝试将 saveUserDetails 函数移到 registerUser 函数上方。在 JavaScript(实际上是任何语言)中,在定义函数之前使用它被认为是不好的做法。在那个节点上,我还将你的 registerUser 函数放在你的路由声明之上。

      【讨论】:

      • 向上或向下移动函数并不重要,正如@svlapin 所述,对象超出范围
      猜你喜欢
      • 2015-03-01
      • 1970-01-01
      • 2014-11-19
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-04
      • 2010-12-20
      相关资源
      最近更新 更多