我是Javascript和NodeJS的新手。
这是我网站的代码结构:
|source
| | stylesheets
| | | index.styl
| | templates
| | default.jade
| | homepage.jade
|static
| | [.css generated]
|
|server.js
|package.json
|file.js
这是server.js
:
var express = require('express')
, logger = require('morgan')
, app = express()
, templateHome = require('jade').compileFile(__dirname + '/source/templates/homepage.jade')
app.use(logger('dev'))
app.use(express.static(__dirname + '/static'))
app.get('/', function (req, res, next) {
try {
var html = templateHome({ title: 'Home' })
res.send(html)
} catch (e) {
next(e)
}
})
app.listen(process.env.PORT || 3000, function () {
console.log('Listening on http://localhost:' + (process.env.PORT || 3000))
})
我的第二个.js
文件包含一个简单的函数,一旦我的用户点击Jade
中定义的主页中的按钮就应该访问该函数,如下所示:
block content
button(onclick='downloadFile()') Click me
但似乎该函数未在当前范围中定义,即使它在file.js
中定义。我需要添加什么才能将我的其他.js
文件考虑在内?
答案 0 :(得分:1)
您需要使用<script>
元素加载脚本。使用src
属性指定JavaScript文件的URL。您需要为该文件提供一个URL,这可能最简单的方法就是将它移到static/
目录以及CSS旁边。
<script src="/file.js"></script>
请注意,在服务器上运行的程序和在浏览器中运行的程序是两个不同的程序,即使它们是用相同的编程语言编写的。如果file.js
包含预期在服务器上而不是在浏览器中运行的JS,那么您将需要采取另一种方法。 This question解决了在服务器和客户端之间传递值的问题。
另请注意,onclick
和其他内在事件属性nasty gotchas通常被视为小于best practice,通常应由binding handlers with JS替换。