【发布时间】:2021-10-20 10:02:17
【问题描述】:
我最近做了一个带有一些用户认证表单的node js ejs项目。有没有一种特殊的方法可以向前端和后端添加验证。如何在 get 和 post 方法之间传递我的数据值。 ?有没有可能这样做。请帮忙谢谢
【问题讨论】:
标签: node.js forms validation ejs
我最近做了一个带有一些用户认证表单的node js ejs项目。有没有一种特殊的方法可以向前端和后端添加验证。如何在 get 和 post 方法之间传递我的数据值。 ?有没有可能这样做。请帮忙谢谢
【问题讨论】:
标签: node.js forms validation ejs
您不应该在前端验证或验证任何内容。话虽如此,您可以使用 HTML 属性来帮助减轻后端的一些负担,并防止人们在输入时看到密码。
<input type="password" class="input" name="password" autocomplete="off" placeholder="Enter password" required>
在这个例子中,密码类型属性是告诉 HTML 它应该期待的输入类型的关键。添加 required 将防止用户将该字段留空,因此它可以帮助减轻后端的负担并添加另一个非常基本的安全级别(这仍然不是必需的安全输入)。有关密码输入类型的更多信息,请查看 MDN 条目:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/password
您可以在后端使用路由 (routes.js) 文件来服务不同的页面,并通过验证器传递信息。确定登录数据是否有效应始终在连接到数据库(例如 MySQL)的单独控制器文件中完成。验证或清理用户输入应始终在此文件中完成,但特定于您使用的数据库类型。通常这涉及在处理数据库时转义用户输入或使用准备好的语句。
但是,在更一般的意义上,我认为最好的 Node JS 验证器是 express-validator(尤其是如果您已经在后端使用 express)。通过创建自己的中间件并使用现有的中间件,您可以控制在客户端和服务器之间传递的内容。这允许您控制您的服务器是继续执行 get/post 请求还是应该发送错误页面。
要在您的项目中包含 express-validator,只需使用 npm 安装包并将其包含在您的文件中:
const { body } = require("express-validator");
或者如果您需要验证作为 url 参数传递的数据:
const { query } = require("express-validator");
在routes.js 文件中使用此验证器输入密码的示例:
router.post("/login",
[
body("password", "The Password must be of minimum 4 characters length")
.notEmpty()
.trim()
.isLength({ min: 4 }),
],
login
);
此示例处理登录 url 端点,如果在此端点发出发布请求,则使用标准快速验证方法验证类名为“password”的 ejs/html 正文元素。有关如何使用 express-validator 的更多示例和信息,请查看:https://express-validator.github.io/docs/。
【讨论】: