【问题标题】:Mongoose model data not savedMongoose 模型数据未保存
【发布时间】:2015-11-13 01:21:17
【问题描述】:

我正在使用 mongoose 和 mongodb 开发一个 nodejs 项目,在处理个人资料更新逻辑时,我尝试将一些数据发布到服务器,包括个人资料照片上传,我使用强大来处理文件上传并且有没问题,但是即使没有任何错误消息,我的其他表单字段也没有保存,下面是路由代码,请帮助我哪里出错了。

 router.post('/api/profileUpdate/:username', function(req, res, next) {
  User.findOne({
    username: req.params.username
    }, function(err, user) {
        if (err) {
            console.log(err);

        } else {
            if (user) {
                console.log('user found, going to update ...');
                user.age = req.body.age;
                user.gender = req.body.gender;
                user.description  = req.body.description;
                user.occupation = req.body.occupation;

                var form = new formidable.IncomingForm();
                form.parse(req, function(err, fields, files) {
                    //res.writeHead(200, {'content-type': 'text/plain'});
                    //res.write('received upload:\n\n');
                    res.end(util.inspect({fields: fields, files: files}));
                });

                form.on('end', function(fields, files) {
                    console.log(fields);
                    console.log(req.body.age);
                    console.log(files);


                    if (this.openedFiles[0]) {
                        /* Temporary location of our uploaded file */
                        var temp_path = this.openedFiles[0].path;
                        /* The file name of the uploaded file */
                        var file_name = this.openedFiles[0].name;
                        /* Location where we want to copy the uploaded file */
                        var new_location = 'public/images/uploads/';

                        fs.copy(temp_path, new_location + file_name, function(err) {  
                          if (err) {
                            console.error(err);
                          } else {
                            user.profile_photo = '/images/uploads/' + file_name + '?dim=200';
                            console.log(user.profile_photo);
                            console.log("success!")

                            // save the data
                            user.save(function(err) {
                                if (err){
                                    console.log('Error in Saving user: '+err);  
                                    throw err;  
                                }
                                console.log('User update succesful');
                                console.log(user.username);
                                console.log(user.profile_photo);

                             });
                          }
                        });
                    }
                    else {

                    }

                });
                res.redirect(req.url);

            }
        }
 });
});

【问题讨论】:

  • 代码是否显示“成功!”控制台中的消息?此外,您在外部 if/else 块中有一个不执行任何操作的 else 条件。现在,在该分支中编写一个调试消息到控制台可能会有所帮助。
  • 嗨基普,是的,有“成功!”消息显示,还显示用户名和文件路径,文件成功上传到服务器,只是mongodb数据没有更新,似乎没有捕获字段数据,但没有显示错误
  • 你见过这个问题吗:stackoverflow.com/questions/10156623/…
  • 嗯...我之前没有看到提到的线程,但我的情况可能不一样,因为我可以找到用户记录,只是更新没有被触发,是否相关对强大的异步请求,因为似乎帖子数据丢失了?
  • 有趣的想法。您可以通过注释掉整个强大的部分并在文件上传上方添加与此类似的代码来测试它: user.profile_photo = 'TEST'; user.save(function(err){...}

标签: javascript node.js mongodb model save


【解决方案1】:

尝试这种其他方法以查看文件和字段是否全部通过:

var fields=[]
var files = []
form.on('field', function(field, value) {
  fields.push([field, value]);
})
form.on('file', function(field, file) {
  console.log(file.name);
  files.push([field, file]);
})
form.on('end', function() {
  console.log('done');
  console.log(files)
  console.log(fields)
});

【讨论】:

  • 嗨 Kip,我试过你的方法,下面是输出:POST /api/profileUpdate/test@home.com 200 43.379 ms - 240 IMG_5973.JPG done undefined undefined
  • 对不起格式不利于查看,我把它作为答案放在下面
  • 我不确定为什么文件和字段最后会未定义。至少他们应该打印一个空数组。在form.on('field'... 部分,添加console.log(field); console.log(value); console.log(fields);
  • 嗯我尝试打印但似乎没有运气...最后我使用替代方法 multer 包并最终使整个功能正常工作,非常感谢您的帮助,Kip。
猜你喜欢
  • 2015-09-29
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-11
  • 2015-11-22
  • 1970-01-01
相关资源
最近更新 更多