为什么我的节点补丁请求错误地记录了GET请求

我正在构建Node Web应用程序。这是我的问题:

我的app.js文件中已安装了路由,其中​​包括以下两个路由。作为参考,这是一个快速应用。

app.use('/',viewRouter);
app.use('/api/v1/users',userRouter);

来自app.js的userRouter转到具有以下内容的userRoutes.js文件。 userController有一个导出的函数,称为updateMyProfile。

router.patch(
  '/updateMyProfile',userController.updateMyProfile
);

userController函数在下面。作为参考,“ catchAsync”只是一个函数,当一个函数发生时将引发错误。 “ AppError”仅用于将错误发送给客户端。

exports.updateMyProfile = catchAsync(async (req,res,next) => {
  if (req.body.password || req.body.passwordConfirm) {
    return next(
      new AppError(
        'This route is not for password updates. Please use /updateMyPassword.',400
      )
    );
  }
  const filteredBody = filterObj(req.body,'firstName','email');
  if (req.file) filteredBody.photo = req.file.filename;
  const updatedUser = await User.findByIdAndUpdate(req.user.id,filteredBody,{
    new: true,runValidators: true
  });
  res.status(200).json({
    status: 'success',data: {
      user: updatedUser
    }
  });
});

大部分代码来自我在Udemy上的NodeJS课程。当我在这里使用它时,此代码可以正常工作。现在,我正在尝试为新的Web应用程序量身定制代码,一切都变得一团糟。

我正在使用Postman验证并测试API在客户端和MongoDB之间是否正常工作。路由/ api / v1 / users / updateMyProfile /上的邮递员示例,发送此JSON ...

{
    "firstName": "Jared1"
}

产生一条成功消息,并实际上显示字段“ firstName”已更新:

{
    "status": "success","data": {
        "user": {
            "profileAvatar": "default-avatar.jpg","appUserRole": "customer-individual","accountStatus": "active","time_zone_abbreviation": [],"_id": "5dcf221d3d5b28218539c73c","firstName": "Jared1","lastName": "Ledbetter","email": "jared@carbondigital.us","phone": "123-123-1234","companyTitle": "Chief Executive Officer","addressState": "PA","addressCountry": "United States","__v": 0
        }
    }
}

在确认API正常工作后,我开始在页面上使用此功能。我在前端使用PUG。以下是此配置文件更新所用表格的摘录。

注意:每个字段都有一个if函数,该函数检查该字段是否具有值,并输出该值或显示为空白。 (这样做是因为否则会显示“未定义”。)

form.form-horizontal.form-bordered.form-update-account
                      .form-group.row
                        label.col-lg-3.control-label.text-lg-right.pt-2(for='firstName') account Status
                        .col-lg-6
                          -if (user.accountStatus === 'active')
                            input#accountStatus.form-control(type='text' value='active' readonly='readonly')
                          -if (user.accountStatus === 'inactive')
                            input#accountStatus.form-control(type='text' value='Inactive' readonly='readonly')
                          -if (user.accountStatus === 'on-hold')
                            input#accountStatus.form-control(type='text' value='On Hold' readonly='readonly')
                      .form-group.row
                        label.col-lg-3.control-label.text-lg-right.pt-2(for='firstName') Title
                        .col-lg-6
                          - if (user.companyTitle)
                            input#companyTitle.form-control(type='text' value=`${user.companyTitle}`)
                          - if (!user.companyTitle)
                            input#companyTitle.form-control(type='text' value='')
                      .form-group.row
                        label.col-lg-3.control-label.text-lg-right.pt-2(for='firstName') First Name
                        .col-lg-6
                          input#firstName.form-control(type='text' value=`${user.firstName}`)
                      .form-group.row
                        label.col-lg-3.control-label.text-lg-right.pt-2(for='lastName') Last Name
                        .col-lg-6
                          input#lastName.form-control(type='text' value=`${user.lastName}`)
                      .form-group.row
                        label.col-lg-3.control-label.text-lg-right.pt-2(for='emailaddress') Email
                        .col-lg-6
                          input#emailaddress.form-control(type='text' value=`${user.email}`)
                      .form-group.row
                        label.col-lg-3.control-label.text-lg-right.pt-2(for='phoneNumber') Phone
                        .col-lg-6
                          - if (user.phoneNumber)
                            input#phoneNumber.form-control(type='text' value=`${user.phone}`)
                          - if (!user.phoneNumber)
                            input#phoneNumber.form-control(type='text' value='')
                      .form-group.row
                        label.col-lg-3.control-label.text-lg-right.pt-2(for='addressCity') City
                        .col-lg-6
                          - if (user.addressCity)
                            input#addressCity.form-control(type='text' value=`${user.addressCity}`)
                          - if (!user.addressCity) 
                            input#addressCity.form-control(type='text' value='')
                      .form-group.row
                        label.col-lg-3.control-label.text-lg-right.pt-2 State
                        .col-lg-6
                          select#addressState.form-control.populate(data-plugin-selecttwo='' value='')
                            - if (user.addressState)
                              option(value=`${user.addressState}`)
                            - if (!user.addressState)
                              option(value='') No State Selected
                            option(value='AL') Alabama
                            option(value='AK') Alaska
                            option(value='AZ') Arizona
                            option(value='AR') Arkansas
                            option(value='CA') California
                            option(value='CO') Colorado
                            option(value='CT') Connecticut
                            option(value='DE') Delaware
                            option(value='FL') Florida
                            option(value='GA') Georgia
                            option(value='HI') Hawaii
                            option(value='ID') Idaho
                            option(value='IL') Illinois
                            option(value='IN') Indiana
                            option(value='IA') Iowa
                            option(value='KS') Kansas
                            option(value='KY') Kentucky
                            option(value='LA') Louisiana
                            option(value='ME') Maine
                            option(value='MD') Maryland
                            option(value='MA') Massachusetts
                            option(value='MI') Michigan
                            option(value='MN') Minnesota
                            option(value='MS') Mississippi
                            option(value='MO') Missouri
                            option(value='MT') Montana
                            option(value='NE') Nebraska
                            option(value='NH') New Hampshire
                            option(value='NJ') New Jersey
                            option(value='nm') New Mexico
                            option(value='NY') New York
                            option(value='NV') Nevada
                            option(value='NC') North Carolina
                            option(value='ND') North Dakota
                            option(value='OH') Ohio
                            option(value='OK') Oklahoma
                            option(value='OR') Oregon
                            option(value='PA') Pennsylvania
                            option(value='RI') Rhode Island
                            option(value='SC') South Carolina
                            option(value='SD') South Dakota
                            option(value='TX') Texas
                            option(value='TN') Tennessee
                            option(value='UT') Utah
                            option(value='VT') Vermont
                            option(value='VA') Virginia
                            option(value='WA') Washington
                            option(value='WI') Wisconsin
                            option(value='WY') Wyoming
                            option(value='WV') West Virginia
                            option(value='WI') Wisconsin
                            option(value='WY') Wyoming
                      .form-group.row
                        label.col-lg-3.control-label.text-lg-right.pt-2(for='addressCountry') Country
                        .col-lg-6
                          input#addressCountry.form-control(type='text' value=`${user.addressCountry}`)
                      .form-group.row
                        label.col-lg-3.control-label.text-lg-right.pt-2 Upload Profile Photo
                        .col-lg-6
                          .fileupload.fileupload-new(data-provides='fileupload')
                            .input-append
                              .uneditable-input
                                i.fas.fa-file.fileupload-exists
                                span.fileupload-preview
                              span.btn.btn-default.btn-file
                                span.fileupload-exists Change
                                span.fileupload-new Select file
                                input#profileAvatar(type='file')
                              a.btn.btn-default.fileupload-exists(href='#' data-dismiss='fileupload') Remove
                      .form-group.row
                        label.col-lg-3.control-label.text-lg-right.pt-2 Email Signature
                        .col-lg-9
                          .summernote(rows='10' data-plugin-summernote='' data-plugin-options='{ "height": 180,"codemirror": { "theme": "ambiance" } }')
                            p Placeholder                            
                      .form-row
                        .col-md-12.text-right.mt-3
                          button.btn.btn-primary.modal-confirm Save

好的,所有这些都涵盖了应用程序的后端。在前端,我有一个名为updateSettings.js的文件,其中还具有一个名为updateSettings的函数。

/* eslint-disable */

import axios from 'axios';
import { showAlert } from './alerts';

// Type is either 'password' or 'data' (data = name & email)
export const updateSettings = async (data,type) => {
  try {
    const url =
      type === 'password'
        ? '/api/v1/users/updateMyPassword'
        : '/api/v1/users/updateMyProfile';

    const res = await axios({
      method: 'PATCH',url,data
    });
    if (res.data.status === 'success') {
      showAlert('success',`${type.toUpperCase()} updated successfully!`);
      // window.setTimeout(() => {
      //   location.assign('/me');
      // },100);
    }
  } catch (err) {
    showAlert('error',err.response.data.message);
  }
};

那个updateSettings.js文件被导入到我的index.js文件中,这就是魔术发生的地方。我只包含了相关的代码行。

import { updateSettings } from './updateSettings';

const userDataForm = document.querySelector('.form-update-account');

  if (userDataForm)
    userDataForm.addEventListener('submit',e => {
      e.preventDefault();
      const form = new FormData();
      form.append('firstName',document.querySelector('#firstName').value);
      form.append('email',document.querySelector('#emailaddress').value);
      updateSettings(form,'data');
    });

因此,当我在浏览器中单击保存按钮(PUG文件)时,会发生一些事情。

  1. 该页面将重新加载与数据库中完全相同的信息。表示未上传数据库。我对此进行了验证,并且还验证了这不是缓存问题。
  2. 以下URL参数已添加到我的URL中。 “?files =”
  3. 我收到以下控制台消息。
GET /my-account?files= 304 332.887 ms - -
Error: Can't find /vendor/bootstrap-markdown/js/markdown.js on this server!
    at app.all (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/app.js:119:8)
    at Layer.handle [as handle_request] (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/layer.js:95:5)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:137:13)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at Route.dispatch (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/layer.js:95:5)
    at /Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/index.js:281:22
    at param (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/index.js:354:14)
    at param (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/index.js:365:14)
    at Function.process_params (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/index.js:410:3)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/index.js:275:10)
Error: Can't find /vendor/bootstrap-markdown/js/to-markdown.js on this server!
    at app.all (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/app.js:119:8)
    at Layer.handle [as handle_request] (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/layer.js:95:5)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:137:13)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at Route.dispatch (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/layer.js:95:5)
    at /Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/index.js:281:22
    at param (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/index.js:354:14)
    at param (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/index.js:365:14)
    at Function.process_params (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/index.js:410:3)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/index.js:275:10)
GET /vendor/bootstrap-markdown/js/markdown.js 404 1.382 ms - -
GET /vendor/bootstrap-markdown/js/to-markdown.js 404 1.207 ms - -
Error: Can't find /vendor/bootstrap-markdown/js/markdown.js on this server!
    at app.all (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/app.js:119:8)
    at Layer.handle [as handle_request] (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/layer.js:95:5)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:137:13)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at Route.dispatch (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/layer.js:95:5)
    at /Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/index.js:281:22
    at param (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/index.js:354:14)
    at param (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/index.js:365:14)
    at Function.process_params (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/index.js:410:3)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/index.js:275:10)
GET /vendor/bootstrap-markdown/js/markdown.js 404 0.359 ms - -
Error: Can't find /vendor/bootstrap-markdown/js/to-markdown.js on this server!
    at app.all (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/app.js:119:8)
    at Layer.handle [as handle_request] (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/layer.js:95:5)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:137:13)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:131:14)
    at Route.dispatch (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/layer.js:95:5)
    at /Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/index.js:281:22
    at param (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/index.js:354:14)
    at param (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/index.js:365:14)
    at Function.process_params (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/index.js:410:3)
    at next (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/node_modules/express/lib/router/index.js:275:10)
GET /vendor/bootstrap-markdown/js/to-markdown.js 404 0.528 ms - -

看到这里,我收到几个对我来说没有多大意义的GET请求。我知道我应该在控制台中记录这些内容,但我不知道为什么要记录这些内容。从完整的控制台日志中,我删除了除GET请求之外的所有内容。

GET /my-account?files= 304 332.887 ms - -
GET /vendor/bootstrap-markdown/js/markdown.js 404 1.382 ms - -
GET /vendor/bootstrap-markdown/js/to-markdown.js 404 1.207 ms - -
GET /vendor/bootstrap-markdown/js/markdown.js 404 0.359 ms - -
GET /vendor/bootstrap-markdown/js/to-markdown.js 404 0.528 ms - -

然后,每个这些GET请求都导致一个错误。我已从错误中删除了节点模块路径。

Error: Can't find /vendor/bootstrap-markdown/js/markdown.js on this server!
    at app.all (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/app.js:119:8)

Error: Can't find /vendor/bootstrap-markdown/js/to-markdown.js on this server!
    at app.all (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/app.js:119:8)

Error: Can't find /vendor/bootstrap-markdown/js/markdown.js on this server!
    at app.all (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/app.js:119:8) 

Error: Can't find /vendor/bootstrap-markdown/js/to-markdown.js on this server!
    at app.all (/Applications/MAMP/htdocs/Carbon_Digital/Carbon_Builder/carbon-builder-private/app.js:119:8)

自然,我将从此记录的控制台语句中做两件事。

  1. 我检查了GET请求中引用的路径,并且存在两个bootstrap-markdown文件。因此,我不知道为什么我对存在的文件会出错。

  2. 我在119行检查了app.js文件,以下功能涵盖了118-120行。

app.all('*',(req,next) => {
  next(new AppError(`Can't find ${req.originalUrl} on this server!`,404));
});

牢记所有这些,是否有人对这里发生的事情有所了解?保存按钮不应创建GET请求。另外,对于存在的文件也不应有错误。我只是在尝试更新用户的个人资料信息,无法找出问题所在。

旁注。由于该项目的性质,我无权共享整个GitHub存储库。

stupid113 回答:为什么我的节点补丁请求错误地记录了GET请求

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3042927.html

大家都在问