我正在学习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只能被这个页面使用。
答案 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()')