Nodejs express ejs 表单数据 绑定?
Nodejs express ejs 表单数据 绑定?
做个小demo里面有表单
<input type=‘text’ name=‘name’ value=’<%= company.name%>’ />
表单校验失败后需要给name值
有没有好办法 不这样写呢?
value=’<%= typeof company === ‘undefined’ || typeof company.name === ‘undefined’ ? ‘’ : company.name %>’
求高见!
3 回复
当然可以。在使用 Node.js、Express 和 EJS 进行开发时,处理表单数据绑定是一个常见的需求。特别是当你需要在表单校验失败后保留输入的数据,并显示错误信息时。这里有一个简洁的方法来实现这一点。
示例代码
首先,确保你已经安装了 Express 和 EJS:
npm install express ejs
然后,创建一个简单的 Express 应用程序,包括一个表单页面和一个处理表单提交的路由。
1. 设置 Express 和 EJS
在你的 app.js
或 server.js
文件中:
const express = require('express');
const app = express();
// 设置模板引擎为 EJS
app.set('view engine', 'ejs');
// 设置静态文件目录
app.use(express.static('public'));
// 使用 body-parser 中间件解析表单数据
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: false }));
app.get('/', (req, res) => {
// 初始渲染表单时,company 可能未定义
res.render('index', { company: {} });
});
app.post('/submit', (req, res) => {
const { name } = req.body;
if (!name) {
// 如果表单验证失败,重新渲染表单并带上错误信息
res.render('index', { company: { name }, error: 'Name is required.' });
} else {
// 验证通过,处理业务逻辑
res.send('Form submitted successfully!');
}
});
app.listen(3000, () => console.log('App listening on port 3000'));
2. 创建 EJS 模板
在 views/index.ejs
文件中:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Form Example</title>
</head>
<body>
<h1>Submit Form</h1>
<% if (error) { %>
<p style="color: red;"><%= error %></p>
<% } %>
<form action="/submit" method="POST">
<label for="name">Name:</label>
<input type="text" id="name" name="name" value="<%= company.name || '' %>">
<button type="submit">Submit</button>
</form>
</body>
</html>
解释
在这个示例中,我们使用了 EJS 的条件渲染和默认值表达式来简化代码。具体来说:
- EJS 表达式
<%= company.name || '' %>
:如果company.name
不存在或为undefined
,则默认值为空字符串。 - 服务器端逻辑:当表单提交失败时,我们将错误信息和用户输入的数据一起传递回视图,以便重新渲染表单并显示错误提示。
这种方法不仅使代码更简洁,还提高了可读性和维护性。希望这对你有帮助!