我可以在脚本中从JS中引用Node JS函数吗?标记在Jade模板中

Can I reference a Node JS function from JS within a <script> tag in a Jade template

本文关键字:JS Jade Node 脚本 引用 我可以 函数      更新时间:2023-09-26

我正在用Node.js, Express和MongoDB建立一个博客。在我的"create new post"模板中,我有一个标题字段和一个空格字段。

我正在使用来自NPM的Node.js的Slugs: https://npmjs.org/package/slugs

我想做的是:

  1. 使用EventListener动态地从标题文本输入中获取值,
  2. 通过slugs()函数过滤,
  3. 将其添加到文本输入的value属性中。

那么我将在标题字段中输入"My favorite character is &",别名字段中的值将动态更改为"My -favorite-character-is"。

我相信你必须像这个问题中公认的答案那样做:JADE + EXPRESS:迭代对象在内联JS代码(客户端)?

但是,这更多的是用于引用变量而不是执行函数。这似乎是预处理过的,然后你就不能再访问它了。

我想做的事情可能吗?

或者我应该这样做吗?https://github.com/stipsan/String.Slugify.js

这是我想要的结果:

!= "<script>"
!= "var post_title = document.getElementById('title');"
!= "var post_alias = document.getElementById('alias');"
!=
!= "var aliasValidator = function() {"
!= "  this.value = " + slug( + "this.value" ) + ";"
!= "};"
!= "var titleValidator = function() {"
!= "  post_alias.value = " + slug( + "this.value" ) + ";"
!= "};"
!=
!= "post_title.addEventListener({'keyup': titleValidator, 'keydown': titleValidator, 'change': titleValidator});"
!= "post_alias.addEventListener({'change': aliasValidator});"
!= "</script>"

这里是传递变量的视图:

var slugs = require('slugs');
newPost: function(req, res) {
  return res.render('add-post', {
    title: "Write new post",
    slug: slugs,
    dayDateName: tools.dayName
  });
}

这应该与一些东西拼凑在一起:

  1. 给自己找一个可以加载到浏览器和节点中的慢速函数。有一些简单的方法可以做到这一点,比如将代码复制/粘贴到public/slugs.js文件中,以及更复杂的方法,比如browserify或RequireJS。从简单开始,但直接回答你的问题,不,你不能直接从浏览器中神奇地调用存在于节点进程中的函数,但你可以使用上述技术之一在节点和浏览器中共享相同的函数。
  2. 在浏览器中,使用事件在输入标题时获取标题,对其进行转换,并填充填充字段。这都是浏览器端JS,与模板渲染或节点
  3. 无关在处理表单提交的节点代码中,你还需要确保通过sluggify函数再次运行slug是有效的(这里你可以使用npm模块)。

对于jade,你不需要所有那些疯狂的!=前缀,只要这样做(这与你的问题没有直接关系,仅供参考)。

script
    var put = "your raw javascript here";
    var jade = "knows what to do and you don't need prefixes or escaping";

你写模板的方式,你似乎在暗示这个函数将在客户端执行。

这是不可能的

相反,您应该使用ajax回调到服务器来执行slug函数,或者预先计算所有值并将其发送给客户端。