
<form action="/donaciones/buscar" method="POST">
<div class="form-group">
<label for="cedula">Cedula donante:</label>
<input type="number" name="cedula" id="cedula" value="" placeholder="Cedula donante" autofocus required>
<button type="submit" class="btn btn-primary">Buscar</button>
</div>
</form>关键点说明:
为了处理POST请求并从请求体中获取表单数据,Node.js/Express应用需要配置相应的中间件。express.urlencoded是处理application/x-www-form-urlencoded类型表单数据的标准中间件。
首先,确保你的Express应用配置了该中间件:
const express = require('express');
const app = express();
// ... 其他中间件和配置
// 配置Express以解析URL编码的表单数据
app.use(express.urlencoded({ extended: false }));
// 如果还需要处理JSON数据,可以添加:
// app.use(express.json());
// ... 其他路由定义然后,创建对应的POST路由来接收和处理表单数据:
// 假设你的路由文件是router.js,并且已经导入了Express和数据库连接
// const router = express.Router();
// const pool = require('../database'); // 你的数据库连接池
// const isLoggedIn = require('../lib/auth').isLoggedIn; // 你的认证中间件
router.post('/donaciones/buscar', isLoggedIn, async (req, res) => {
// 从req.body中获取表单字段值。字段名与前端input的name属性一致。
const { cedula } = req.body;
// 输入验证 (非常重要!)
if (!cedula || isNaN(parseInt(cedula))) {
req.flash('message', '请输入有效的捐赠者身份证号码!');
return res.redirect('/donantes/ingreso_donantes'); // 或者渲染带有错误信息的页面
}
try {
// 使用参数化查询防止SQL注入
const donante = await pool.query('SELECT * FROM donantes WHERE cedula = ?', [cedula]);
if (donante.length < 1) {
req.flash('message', '捐赠者未注册!');
res.redirect('/donantes/ingreso_donantes');
} else {
// 找到捐赠者后,渲染页面并传递数据
res.render('donaciones/donaciones_ingreso', { donante: donante[0] });
}
} catch (error) {
console.error("数据库查询错误:", error);
req.flash('message', '查询捐赠者时发生错误。');
res.redirect('/donantes/ingreso_donantes');
}
});关键点说明:
通过本教程,我们了解了在Node.js与Handlebars应用中,如何正确地将前端用户输入数据传递到后端。核心在于避免使用标签和服务器端渲染的Handlebars变量来处理动态用户输入,而是应该利用HTML
以上就是Handlebars与Node.js集成:实现前端表单数据到后端路由的正确传递的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号