【问题标题】:ReferenceError: body is not definedReferenceError:未定义正文
【发布时间】:2019-09-21 15:52:24
【问题描述】:

我正在尝试为我的应用创建一个 editpost 功能,但我不断收到一条错误消息,提示“body is undefined”

ReferenceError: 正文未定义 在 EditPost (C:\server\controllers\posts.js:161:36)

我包含了控制器、组件和 html。

对于控制器

editPost(req, res) {
    console.log(body);
    const Schema = Joi.object().keys({
      post: Joi.string().required(),
      id: Joi.string().optional()
    });
    const { error } = Joi.validate(body, Schema);
    if (error && error.details) {
      return res.status(httpStatus.BAD_REQUEST).json({
        msg: error.details
      });
    }
    const body = {
      post: req.body.post,
      created: new Date()
    };

    Post.findOneAndUpdate({ _id: req.body.id }, body, { new: true })
      .then(post => {
        res
          .status(httpStatus.OK)
          .json({ message: "Post updated successfully", post });
      })
      .catch(err => {
        return res.status(httpStatus.INTERNAL_SERVER_ERROR).json({
          message: err
        });
      });
  }

帖子组件

SubmitEditedPost() {
    console.log(this.editForm.value);
    const body = {
      id: this.postValue._id,
      post: this.editForm.value.editedPost
    }
    this.postService.editPost(body).subscribe(data => {
      console.log(data)
      this.socket.emit('refresh', {})
    }, err => console.log(err))
    M.Modal.getInstance(this.modalElement).close();
    this.editForm.reset();
  }

还有 HTML

        <div class="container">
      <div id="modal" class="modal">
        <div class="modal-content">
          <h4>
              Edit Post
              <button class="button"(click)="CloseModal()"> Close </button>
          </h4>
          <p *ngIf="postValue"> {{postValue.post}} </p>
          <form [formGroup]="editForm" novalidate>
            <textarea formControlName="editedPost" class="materialize-textarea"></textarea>
            <div class="modal-footer">
                <button class="secondary-content deleteBtn btn">Delete</button>&nbsp;
                <button class="btn" (click)="SubmitEditPost()" >Save</button>
              </div>
          </form>
        </div>

      </div>
    </div>

【问题讨论】:

  • editPost 函数第一行应该像 console.log(req.body) 并且当你验证时使用 req.body 而不是 body 或者你可以简单地添加 const { body } = req;作为editPost函数的第一行
  • 在editPost()里面检查这一行const { error } = Joi.validate(req.body, Schema);

标签: node.js angular controller components angular7


【解决方案1】:

删除代码中的console.log(body);。因为它在定义变量之前使用过

在使用之前定义body变量,所以你应该把下面的代码移到上面。

const body = {
      post: req.body.post,
      created: new Date()
    };

【讨论】:

  • 我已经回答了同样的问题。身体也被用于 Joi.validate(body, Schema);也会抛出错误。
  • 但我在你回答之前回答了。并在我的回答中告知了细节。 :( :)
【解决方案2】:

editPost函数的顶部定义body

editPost(req, res) {
    const body = {
      post: req.body.post,
      created: new Date()
    };
    console.log(body);
    const Schema = Joi.object().keys({
      post: Joi.string().required(),
      id: Joi.string().optional()
    });
    const { error } = Joi.validate(body, Schema);
    if (error && error.details) {
      return res.status(httpStatus.BAD_REQUEST).json({
        msg: error.details
      });
    }


    Post.findOneAndUpdate({ _id: req.body.id }, body, { new: true })
      .then(post => {
        res
          .status(httpStatus.OK)
          .json({ message: "Post updated successfully", post });
      })
      .catch(err => {
        return res.status(httpStatus.INTERNAL_SERVER_ERROR).json({
          message: err
        });
      });
  }

【讨论】:

    猜你喜欢
    • 2012-08-24
    • 2016-01-30
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2018-09-26
    • 2016-09-04
    相关资源
    最近更新 更多