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

如何在服务器端(Node.js)使用javascript生成HTML?,javascript,html,node.js,template-engine,Javascript,Html,Node.js,Template Engine,我试图验证注册表单中的用户输入,基本上是创建帐户(注册)时的表单之一,因为经过一些研究,人们建议在客户端和服务器端都进行验证以提高安全性 目标: 我想要实现的是,当用户提交表单时,因此向我的服务器发出POST请求(url可以是/users/signup),输入将使用express validator进行验证。通过这种方式,我可以验证用户指定的电子邮件是否有效,密码和确认码是否匹配,等等,如果有错误,我希望通过添加错误列表来更新html页面 注意我宁愿只更新必要的部分,而不是整个页面,以删除冗余呈

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

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

注意我宁愿只更新必要的部分,而不是整个页面,以删除冗余呈现

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

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

这些函数ul()和li()的思想是用给定的属性(由一个对象表示,该对象的属性是属性名,然后是其相应的值)和我们正在创建的标记内的内容创建HTML字符串。 我认为制作或使用允许此类使用的模块的好处如下:

  • 它促进了功能风格编码
  • 我们不需要学习新的模板语言,就可以用javascript实现一些功能
  • 我们可以充分利用javascript语言的强大功能,例如制作一个函数,生成应用程序所有端点中使用的导航栏HTML代码
最后的笔记
我知道,很多时候,我们希望访问服务器上的数据库或任何其他数据源,并提取一些数据进行复杂的计算,以便以用户理解的方式对其进行格式化和显示。解决方案之一是,再次使用模板引擎,我想知道我建议的想法是否有效,以及是否有其他解决方案

我非常感谢您在这个问题上提供的任何帮助或反馈。

这个问题是基于“意见”的,所以我会给出我的意见

1) 使用模板引擎。它让你的生活轻松多了

2) 模板引擎易于使用。你可以在半小时内学会使用它们。制作自己的代码需要比使用已经证明有效的方法多得多的时间。另外,如果代码是使用通用工具编写的,那么其他开发人员可以轻松地阅读和编辑代码,而他们必须花时间学习您提出的任何自定义解决方案

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

4) 您根本不需要为错误“输出”HTML。只需输出一个JSON对象并让前端处理它。e、 g

res.send({错误:[{字段:'username',消息:'username is required'},…]})

5) 除了应用程序/站点的第一页之外,您不需要为任何内容输出HTML。这里的关键词是webpack+angular 2(angular是平均堆栈中的“A”)

它的使用是有原因的…它的工作和它的好处


因此,总而言之,我想说,除非你有很好的理由避免使用模板引擎,否则我会选择模板引擎。

“4)你根本不需要“输出”HTML来查找错误。只需输出一个JSON对象并让前端处理它。例如”。你能告诉我服务器端代码是什么样子的吗。目前我不知道如何在客户端接收服务器给出的响应。。。res.send()是服务器向客户端发送json的方式。客户端将其作为success/promise回调的参数接收。可以使用jquery发出ajax请求。例如:$.post('/signup',{username:'John',password:'123'})。然后((response)=>{//这里,response.errors将是服务器发送的对象。});
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), "")
    );
}