Jade:加载外部javascript和调用函数

时间:2014-11-02 17:08:03

标签: javascript node.js express pug

我正在学习Express / Node / Jade,现在在Jade文件中我想要从公共文件夹中包含一个javascript文件,仅用于页面。 例如,在jade文件中我输入:

script(src='/javascripts/test.js')

并且在test.js里面我有一个函数

function check_test(){
    return "It's working!"
}

然后我尝试通过

调用Jade中的函数
- var test_response = check_test()

比我得到的错误说“undefined不是函数”而且test.js根本没有加载。 显然Jade没有加载文件,它们只转换成HTML代码。

我看到别人的问题,这是我能找到的最接近的问题,但它没有提供明确的答案。 In Jade, how can you call a function in an external Javascript

所以我的问题是:在这种情况下,我该怎么做才能使它发挥作用?

我不想在layout.js中加载文件,因为我只希望test.js只能被这个页面使用。

3 个答案:

答案 0 :(得分:4)

嗯......首先,浏览器中发生的事情与服务器上发生的情况不同。所以Jade是HTML的渲染,因此如果你在浏览器中。这就是ExpressJS的运输方式,即渲染Jade。如果你想打电话,你的HTML Javascript(Rending of Jade),应该会告诉你Javascript的位置。例如

在Server.js中

// Get the Javascript in the browser
app.use("/javascripts", express.static("./outJavascripts"));
// Get the URL
app.all("/", function(req, res){
  // Render the Jade and Send for the client (Browser)
  req.render("myTemplate.jade");
});

在myTemplate.jade

script(src='/javascripts/test.js')

在“./outJavascripts/test.js”

function check_test(){
    console.log("It's working! :D");
    return "It's working!";
}

如果你这样做,你会发现它在浏览器中运行,文件“./outJavascripts/test.js”。函数“check_test”永远不会在服务器上运行。

答案 1 :(得分:1)

或者将所有文件夹放在公共文件夹中,例如public

public -javascripts -stylesheets -images

然后公开该公用文件夹

app.use(express.static(path.join(__dirname, 'public')));

这意味着你可以

script(src='/javascripts/script.js') link(rel='stylesheet', href='/stylesheets/style.css')

答案 2 :(得分:1)

保存您的JS文件并将其链接到您的Jade文件中:

script(src="filepath/yourJSfile.js")

然后调用该函数,我在这里使用一个按钮,例如:

button(class="btn", onclick='functionName()')