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

标签 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 文件?

最佳答案

您需要使用 <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 .

关于javascript - NodeJS 中找不到另一个 .js 文件中定义的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41963377/

相关文章:

javascript - Nest.js 中的可选身份验证 @nestjs/passport

javascript - 编译 SELECT 查询时检测到 KNEX 未定义绑定(bind)

javascript - 复选框不会在视觉上取消选中

javascript - 大型 FOR 循环中的新局部变量,这是一个问题吗?

javascript - javascript中的可拖动元素

javascript - Node.js - 禁用浏览器的 Javascript

javascript - Mongoose:增加我的文档版本号不起作用,当我尝试保存时出现版本错误

node.js - 将环境变量从 GitHub 操作传递到 json

javascript - location.href 仅适用于 Chrome

javascript - 获取数组中的差异