📜  req body express - Javascript (1)

📅  最后修改于: 2023-12-03 14:47:04.050000             🧑  作者: Mango

Express中的请求体

在使用Express构建Web应用程序时,了解如何处理请求体非常重要。请求体是从客户端发送给服务器的数据,通常是通过HTML表单提交、AJAX请求或REST API传输。

在Express中,处理请求体需要使用中间件。默认情况下,Express不会解析请求体,因此需要使用body-parser中间件或内置的express.json()和express.urlencoded()中间件来处理请求体。

安装和使用body-parser中间件

要安装body-parser中间件,请使用以下命令:

npm install body-parser

要使用body-parser中间件,请将其添加到Express应用程序中:

const express = require('express');
const bodyParser = require('body-parser');

const app = express();

//解析请求体的中间件
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

//处理POST请求
app.post('/api/users', (req, res) => {
  const user = req.body;
  //在此处处理用户数据...
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

在上面的示例中,我们使用了body-parser中间件,并将其添加到Express应用程序中。我们还使用了app.use()方法将中间件绑定到应用程序。

在HTTP POST请求 /api/users 中,req.body包含解析后的请求体。

使用内置的express.json()和express.urlencoded()中间件

为了方便起见,Express还内置了json()和urlencoded()中间件,用于解析JSON格式和URL编码的请求体。

const express = require('express');

const app = express();

//解析JSON格式的请求体
app.use(express.json());

//解析URL编码格式的请求体
app.use(express.urlencoded({ extended: true }));

//处理POST请求
app.post('/api/users', (req, res) => {
  const user = req.body;
  //在此处处理用户数据...
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

内置的Express中间件是按照相同的方式处理请求体的,只需使用app.use()方法将它们添加到应用程序中即可。

接收文件上传

如果您的Web应用程序需要接收文件上传,您可以使用multer中间件。multer是一个Node.js中间件,用于处理multipart/form-data请求,它支持多个文件上传。

安装multer中间件:

npm install multer

要使用multer中间件,请在应用程序中添加以下代码:

const express = require('express');
const multer = require('multer');

const app = express();

const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'public/uploads/')
  },
  filename: function (req, file, cb) {
    cb(null, Date.now() + '-' + file.originalname)
  }
})

const upload = multer({ storage: storage });

//处理文件上传
app.post('/api/upload', upload.single('file'), (req, res) => {
  //在此处处理上传的文件...
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

在上面的代码中,我们使用了multer中间件,并定义了一个存储引擎diskStorage,用于将上传的文件存储在磁盘上。我们还使用upload.single()方法指定了上传文件的名称,这里是file

在HTTP POST请求 /api/upload 中,req.file包含上传的文件的信息。

注意:在处理文件上传时,需要确保在Form表单中添加enctype="multipart/form-data"属性,否则无法正常上传文件。

结论

处理请求体是构建Web应用程序时必不可少的步骤。在Express中,我们可以使用body-parser中间件或内置的express.json()和express.urlencoded()中间件来处理请求体。如果您的Web应用程序需要接收文件上传,可以使用multer中间件。

Express的官方文档也提供了有关此主题的详细信息: https://expressjs.com/en/resources/middleware/body-parser.html