更新Node.js Passport用户

时间:2016-09-28 12:08:49

标签: javascript ajax node.js passport.js passport-local

使用MongoDB的Node.js / Express应用程序,并使用Passport,Passport Local和Passport Local Mongoose。

我正在尝试允许我网站的注册用户更新其个人资料。我的想法是重新注册注册表单和逻辑,并通过PUT请求将更新的数据发送到服务器。

注册使用Ajax提交表单,虽然工作正常但是当我发送PUT请求更新用户时,req.body返回空,服务器抛出错误500.

更新表单标记和javascript几乎与注册相同,所以是因为我正在使用PUT请求?我甚至不确定我是否会以正确的方式解决这个问题......

任何指针都会非常愉快地收到!

编辑用户表单提交逻辑:

    $form.on('submit', function(e) {
      if ($form.hasClass('is-uploading')) return false;

      $form.addClass('is-uploading').removeClass('is-error');

      if (isAdvancedUpload) {
        e.preventDefault();

        var ajaxData = new FormData($form.get(0));

        if (droppedFiles) {
          $.each(droppedFiles, function(i, file) {
            ajaxData.append($input.attr('name'), file);
          });
        }

        $.ajax({
          url: $form.attr('action'),
          type: $form.attr('method'),
          // data: ajaxData,
          dataType: 'json',
          cache: false,
          contentType: false,
          processData: false,
          complete: function() {
            $form.removeClass('is-uploading');
          },
          success: function(data) {
            // $form.addClass(data.success == true ? 'is-success' : 'is-error');
            // if (!data.success) console.log(data);
            window.location.replace('/matches');
          },
          error: function(xhr, textStatus, errorThrown) {
            console.log(xhr)
            console.log(xhr.statusText);
            console.log(textStatus);
            console.log(errorThrown);          }
        });

      } else {
        var iframeName = 'uploadiframe' + new Date().getTime();
        $iframe = $('<iframe name="' + iframeName + '" style="display: none;"></iframe>');

        $('body').append($iframe);
        $form.attr('target', iframeName);

        $iframe.one('load', function() {
          var data = JSON.parse($iframe.contents().find('body').text());
          $form
            .removeClass('is-uploading')
            .addClass(data.success == true ? 'is-success' : 'is-error')
            .removeAttr('target');
          if (!data.success) $errorMsg.text(data.error);
          $form.removeAttr('target');
          $iframe.remove();
        });
      };
    });

服务器端编辑路线:

// PUT edits
app.put('/users/:_id', function(req, res){
  var spokenLangs = req.body.spokenlanguages.split(',');
  var learnLangs = req.body.learninglanguages.split(',');
  var comms = req.body.commethod.split(',');
  var photos = []
  req.files.forEach(function(file, i){
    photos.push(req.files[i].path.replace('public/', '../'));
  });
  var updatedUser = new User(
    {
      username: req.body.username,
      firstName: req.body.fname,
      lastName: req.body.lname,
      age: req.body.age,
      gender: req.body.gender,
      spokenLanguages: spokenLangs,
      learningLanguages: learnLangs,
      info: req.body.info,
      country: req.body.country,
      city: req.body.city,
      comMethod: comms,
      photos: photos,
      lastLogin: Date.now()
    }
  );
  User.findByIdAndUpdate(req.params._id, updatedUser, function(err, user){
    if(err){
      console.log('error updating user');
      console.log(err);
    } else {
      res.redirect('/matches');
    }
  });
});

谢谢你们好人!

0 个答案:

没有答案