繁体   English   中英

如何在服务器端(Node.js)上使用javascript生成HTML?

[英]How to generate HTML with javascript on the server side (Node.js)?

我试图验证来自注册表单的用户输入,基本上是创建帐户(注册)时使用的表单之一,因为经过一些研究,人们建议同时在客户端和服务器端进行验证以提高安全性。

目标 :我想要实现的是用户提交表单时,因此向我的服务器发出POST请求(URL可以是/ users / signup),将使用express-validator验证输入。 这样,我可以验证用户是否指定了有效的电子邮件,密码及其确认是否匹配等,以及是否有错误,我想通过添加错误列表来更新html页面。

请注意 ,我宁愿只更新必要的部分,而不是整个页面,以删除多余的渲染。

现在,我知道可以使用JadeHandlebars类的模板引擎,这将导致类似于以下代码: res.render('signup', {errors: errors.array()}); 其中errors是一个变量,其中包含验证结果,然后是包含特定模板引擎代码的注册文件。 但是我想知道是否还有其他方法可以在不学习新的模板引擎的情况下实现相同的效果,也许类似于JSX代码的样子。

这是我建议的代码,该代码使用具有必要实现(尚未完成)的模块:

let express = require("express");
const html = require("../htmlGenerator/html");  
const { check, validationResult } = require("express-validator/check");

let router = express.Router();

/* Create a new account/user. */
router.post("/signup", [
    // Input Validation.
    check("email", "Email is not valid").isEmail()
    // ...
 ], (req, res) => {
     const errors = validationResult(req);

     if (!errors.isEmpty()) 
         res.send(htmlErrorList(errors.array()));

     //...
});

function htmlErrorList(errors) {
    return html.ul(
        errors.reduce((res, error) =>
            res + html.li({class: "alert alert-danger"}, error.msg), "")
    );
}

这些函数ul()和li()的想法是创建具有给定属性(由对象表示的HTML字符串,该对象的属性是属性名称,然后是其对应的值),并且标记中的内容是创建。 我看到制作或使用允许这种使用的模块的好处是:

  • 促进功能样式编码
  • 我们无需学习新的模板语言即可实现我们可以使用javascript进行的操作
  • 我们可以利用javascript语言的全部功能,例如制作一个函数,该函数可以生成应用程序所有端点中使用的导航栏的HTML代码。

最后说明
我知道很多时候,我们想访问服务器上的数据库或任何其他数据源,并提取一些数据以进行复杂的计算,以便对其进行格式化并以用户理解的方式显示。 解决方案之一是再次使用模板引擎,我想知道我建议的想法是否有效,以及是否有解决此问题的其他解决方案。

感谢您对此问题的帮助或反馈。

这个问题是基于“观点”的,因此我将给出我的意见。

1)使用模板引擎。 它使您的生活更加轻松。

2)模板引擎易于使用。 您可以在半小时内学会使用大多数它们。 编写自己的代码比使用已经证明的方法需要更多的时间。 另外,如果其他开发人员使用通用工具编写了代码,则其他开发人员可以轻松地阅读和编辑代码,而他们将不得不花费时间来学习您提供的任何自定义解决方案。

3)您的示例非常简单,您只需连接字符串并使用模板文字即可生成“ HTML”。 如果您的示例变得更加复杂……比您的解决方案将变得更……难于阅读和维护。

4)您根本不需要为错误完全“输出” HTML。 只需输出一个JSON对象并让前端处理它即可。 例如

res.send({错误:[{字段:'用户名',消息:'用户名是必需的'},...]});

5)除了您的应用程序/网站的首页之外,您实际上不需要输出任何其他内容的HTML。 此处的关键字是webpack +角度2(角度是MEAN堆栈中的“ A”)。

使用它是有原因的……它的工作原理和优点。

因此,总而言之,除非您有充分的理由避免使用模板引擎,否则我会选择模板引擎。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM