猫鼬:验证错误路径“名称”为必填项

时间:2019-11-10 05:41:55

标签: node.js

这是我的HTML,带有表单。

<form [formGroup]="form" (submit)="onSave()" *ngIf="!isLoading">
    <mat-form-field>
    <input matInput type="text" formControlName="name" placeholder="Organization Name">

这是我component.ts文件中onSave()的代码。

onSave() {
  if (this.form.invalid) {
    return;
  }
  this.isLoading = true;
  if (this.mode === "create") {
    this.objsService.add(
      this.form.value.name
    );
  } else {
    this.objsService.update(
      this.id,
      this.form.value.name
    );
  }
  this.form.reset();
}

这是我服务中的add()函数。

/* #region  Create of CRUD */
add(name: string) {
  const objData = new FormData();
  objData.append("name", name);
  this.http
    .post<{ message: string; obj: Organization }>(
      'http://localhost:3000/api/organizations',
      objData
    )
    .subscribe(responseData => {
      this.router.navigate(["/organizations"]);
    });
}
/* #endregion */

最后这是我的.post到mp api中的路由器。

/* #region  Create of CRUD */
router.post('', (req, res, next) => {
  console.log('req.body.name: ' + req.body.name);
  const obj = new objModel({
    name: req.body.name
  });
  obj.save().then(createdObj => {
    res.status(201).json({
      message: capitalize(plural) + ' added successfully',
      obj: {
        ...createdObj,
        id: createdObj._id
      }
    });
  });
});
/* #endregion */

您可以在我的api中看到,我正在运行“ console.log('req.body.name:'+ req.body.name);”,其输出为“ req.body.name:undefined” 。怎么会这样我想念什么?

在我的服务中,我最后添加了以下行。

add(name: string) {
  const objData = new FormData();
  objData.append('name', name);
  console.log(name);
  console.log(objData);

这是控制台中显示的内容。

dfgasdfg

FormData {}
  __proto__: FormData
    append: ƒ append()
    ...
    values: ƒ values()
      arguments: (...)
      ...
      name: "values"
        __proto__: ƒ ()
        ...
        name: ""

名称:“”应为名称:“ dfgasdfg”。 .append语法不正确吗?

这是我的server.js文件。我确实包括了身体解析器。我实施不当了吗?

const path = require("path");
const express = require("express");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");

const postsRoutes = require("./routes/posts");
const organizationsRoutes = require("./routes/organizations");

const app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

提前谢谢!

3 个答案:

答案 0 :(得分:0)

我认为您在节点api中缺少body-parser中间件,这就是为什么您在req中未定义的原因。

答案 1 :(得分:0)

const bodyParser = require('body-parser');
const app = express();
app.use(express.json());
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));

请尝试在server.js根文件中使用上述快速中间件,以在req.body对象中获取数据。

答案 2 :(得分:0)

好,我是个白痴。我需要使用以下内容。

app.use(bodyParser.urlencoded({extended: true}));

我正在使用:

app.use(bodyParser.urlencoded({extended: false}));

感谢方向!!!

P.S。

好,我拿回去。这不是永久性的解决方案。我正在运行Express 6.9.0,没有Express 4.16+有自己的解析器吗?我更改了代码,现在有了它:

app.use(express.json());
app.use(express.urlencoded());

在我使用API​​的方法中,看起来仍然没有用表单中的值填充req.body.name。

使用此:

console.log('req.body.name: ' + req.body.name);

我明白了:

req.body.name: undefined