注册表单提交至Express/PostgreSQL时数据为Null的问题求助
问题:注册表单提交后所有字段为Null,数据库插入全Null记录
我正尝试通过前端注册表单收集用户信息并保存到PostgreSQL数据库,但每次提交后,终端输出的用户对象所有字段均为Null,数据库中也插入了全Null的记录。
终端输出示例:
{"customer_id":6,"first_name":null,"last_name":null,"e_mail":null,"password":null,"password2":null,"is_verified":false} The user is already registered {"customer_id":7,"first_name":null,"last_name":null,"e_mail":null,"password":null,"password2":null,"is_verified":false}
PostgreSQL数据库(表名customers)中也存在全Null的行。
我使用Express作为后端框架,以下是server.js、register.html、users.js的代码片段,请问需要修改或添加哪些代码才能获取正确的用户输入?
解决方案
1. 给Express添加表单数据解析中间件
Express默认不会自动解析表单提交的数据,需根据表单类型添加对应中间件:
- 若表单为
application/x-www-form-urlencoded(普通文本表单),在server.js中添加:app.use(express.urlencoded({ extended: true })); - 若表单为
multipart/form-data(含文件上传场景),先安装multer依赖:
再在npm install multerserver.js中配置:const multer = require('multer'); const upload = multer(); app.use(upload.none()); // 解析不带文件的multipart表单数据
2. 匹配前端表单name属性与后端字段名
确保register.html中输入框的name属性和后端读取的字段名完全一致:
前端示例:
<input type="text" name="first_name" placeholder="名"> <input type="text" name="last_name" placeholder="姓"> <input type="email" name="e_mail" placeholder="邮箱"> <input type="password" name="password" placeholder="密码"> <input type="password" name="password2" placeholder="确认密码">
后端users.js中对应读取:
const { first_name, last_name, e_mail, password, password2 } = req.body;
3. 确认后端正确从req.body取值
检查users.js的注册逻辑,确保直接从req.body获取用户输入,而非使用空值或未初始化变量:
正确示例:
const newUser = { first_name: req.body.first_name, last_name: req.body.last_name, e_mail: req.body.e_mail, password: req.body.password, password2: req.body.password2, is_verified: false };
4. 验证表单提交配置
确保前端表单的提交方式和路径与后端路由匹配:
<form action="/register" method="POST"> <!-- 表单输入项 --> <button type="submit">注册</button> </form>
后端server.js需对应注册路由:
app.post('/register', require('./users').register); // 假设register是处理注册的函数
内容的提问来源于stack exchange,提问作者Arda Soysal
相关产品推荐
相关产品推荐

