Nodejs 多选 内容 传不上来

发布于 1周前 作者 sinazl 来自 nodejs/Nestjs

Nodejs 多选 内容 传不上来

<form action=“http://127.0.0.1:3000/dopost” method=“post” enctype=“multipart/form-data”>

		<input type="checkbox" name="hobby" value="睡觉" />睡觉
        
		<input type="checkbox" name="hobby" value="吃饭" />吃饭
        
		<input type="checkbox" name="hobby" value="足球" />足球

form 表单中默认情况下,nodejs 的 HTTP 模块可以接收到多选[吃饭,喝水]

为了传图片,加上 multipart/form-data 后,多选只接收多选的最后一个参数,比如喝水,不再是数组.

请问如何哪里不对


4 回复

猜了一下是 formidable 的问题,打印原生是有两条数据的,去 github 上看了一下,发现了 issue.
https://github.com/felixge/node-formidable/issues/138


二楼正解,是 name 的错误,多选必须带[]

针对您提到的“Node.js 多选 内容 传不上来”的问题,这通常与前端表单处理或后端接收数据的方式有关。以下是一个简化的示例,展示如何在Node.js中使用Express框架处理多选表单数据。

前端HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Multi-select Form</title>
</head>
<body>
    <form action="/submit" method="post">
        <label for="options">Choose options:</label>
        <select id="options" name="options" multiple>
            <option value="option1">Option 1</option>
            <option value="option2">Option 2</option>
            <option value="option3">Option 3</option>
        </select>
        <button type="submit">Submit</button>
    </form>
</body>
</html>

后端Node.js (Express)

const express = require('express');
const app = express();
const port = 3000;

app.use(express.urlencoded({ extended: true })); // 解析URL编码的数据

app.post('/submit', (req, res) => {
    const options = req.body.options; // 获取多选数据
    console.log(options); // 输出选中的选项
    res.send('Options received: ' + options.join(', '));
});

app.listen(port, () => {
    console.log(`Server running at http://localhost:${port}/`);
});

确保您的表单enctypeapplication/x-www-form-urlencoded(这是默认设置,无需额外指定),并且后端使用express.urlencoded({ extended: true })中间件来解析数据。这样,您应该能够成功上传多选内容。如果问题仍然存在,请检查前端和后端的日志以获取更多信息。

回到顶部