javascript - 在 JavaScript 中验证模板变量

标签 javascript node.js couchdb ejs

使用模板引擎时是否有验证的最佳案例实践?

我目前正在使用node.js和couchdb构建一个网站,并且我使用express和ejs分别作为框架和模板引擎。我最终可能会在 HTML 中得到 [Object object] 或未定义的字面拼写。我可以尝试在沙发中使用 validate_doc_update 函数进行验证,或者在渲染到模板之前在路由函数内的 Node 中进行验证,或者直接在 ejs 模板中进行验证。我应该执行其中哪一项或所有这些操作?

最佳答案

我建议编写一个函数来获取模板上下文对象并准备渲染。这些有时称为演示者功能和/或演示者模式。在渲染模板之前,您可以在 node.js 路由函数中使用它。此函数可以用空字符串替换 null/undefined,还可以检测 toString 的对象。是“[Object object]”或其他不需要的内容,也将它们替换为空字符串。为此编写单元测试很容易,并且可以防止您在许多模板中重复逻辑。该函数应该递归地遍历整个对象图或对象图数组。

您可能还需要其他功能,例如缩写异常长的字符串。例如,如果有人不小心将一堆垃圾粘贴到用户对象的“firstName”字段中,并且超出了 100 个字符的合理限制,则演示器函数可能会 chop 它并附加省略号。这只是此数据清理或“演示”类型逻辑的另一个示例。

否则,您需要像 <%= someObj.someProp || '' %> 这样的表达式在您的 ejs 模板中,这将导致大量样板代码重复。

Here's a first-cut working jsfiddle implementation (使用 underscore.js)。

function sanitize(context) {
    if (Array.isArray(context)) {
      return _.map(context, sanitize);
    }
    _.each(context, function (value, key) {
        if (value === null) {
          context[key] = "";
          return;
        }

        switch (typeof value) {
          case "object":
            context[key] = sanitize(value);
            break;
          case "number":
            //No-op
            break;
          case "boolean":
            //No-op
            break;
          default:
            context[key] = value || ""; //handles undefined
        }                
    });
    return context;
}

关于javascript - 在 JavaScript 中验证模板变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10667606/

相关文章:

javascript - AngularJS 从 Controller 更改 ng-view 中的 View

javascript - 将 XML 解析为 HTML/JS

javascript - 使用现有的 winston 记录器

javascript - React 组件未在 History.push 上重新加载

javascript - MongoError : Authentication failed. - 连接到 MongoLab 时遇到问题

javascript - Socket.IO:重新连接导致服务器连接代码运行两次

ruby - 选择数据库技术

javascript - 我应该使用什么作为文档 key 来保持幂等性?

couchdb - 忘记用户名/密码到 CouchDB

javascript - 我怎样才能用javascript找出一个div中的div?