在NodeJS中找不到的另一个.js文件中定义的函数

时间:2017-01-31 17:05:34

标签: javascript node.js

我是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文件考虑在内?

1 个答案:

答案 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替换。