0

我正在尝试从我的应用程序测试 POST rest api。

我的 package.json 文件:

{
  "name": "crypto_backend",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.1",
    "joi": "^17.4.0",
    "mongoose": "^5.12.12"
  },
  "devDependencies": {
    "nodemon": "^2.0.7"
  }
}

我的 index.js 文件:

const express = require("express");

const app = express();

app.use(express.json());

const courses = [
  { id: 1, name: "uday1" },
  { id: 2, name: "uday2" },
  { id: 3, name: "uday3" },
  { id: 4, name: "uday4" },
];

app.get("/api/courseslist", (req, res) => {
  res.send(courses);
});

app.post("/api/courses", (req, res) => {

    console.log(req.body);

  const course = {
    id: courses.length + 1,
    name: req.body.name,
  };
  courses.push(course);
  res.send(course);
});

app.listen(3000, () => console.log("listening"));

当我使用 postman chrome 插件和 vscode 客户端扩展请求 POST 时,req.get 没有获取任何参数并且名称字段被视为空。

但我通过了如下请求。

POST http:/localhost:3000/api/courses

{
    "name": "sample"
}

在邮递员插件中选择原始数据并传递上述数据。

4

1 回答 1

0

Beyond express.json,你需要添加express.urlencoded解析正文:

const express = require("express");

const app = express();

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

...

express.urlencoded() 函数是 Express 中内置的中间件函数。它使用 urlencoded 有效负载解析传入的请求,并使我们能够获取req.body.

如果您想从表单而不是 Postman 获取数据,则不需要设置任何标题,因为当用户提交表单时,浏览器会为您发送所有必要的标题。因此,像这样的简单传统形式应该可以工作:

<form action="/api/courses" method="post">
  <input type="text" name="name" />
</form>
于 2021-05-28T19:54:52.580 回答