当前位置: 首页 > 面试题库 >

onload js调用不适用于节点

潘坚白
2023-03-14
问题内容

我开始学习node.js,现在我只是想用node执行我的旧无节点应用程序。在这个应用程序中,我有一个html页面,其中的正文调用了onload
js函数。工作正常。

现在我有一个节点应用程序:app.js,很简单:

var express = require ('express');
var app = express ();
app.use(express.static(__dirname + '/images'));
app.use(express.static(__dirname + '/CSS'));
app.use(express.static(__dirname + '/font'));
app.use(express.static(__dirname ));
app.use(express.static(__dirname +'/ketcher'));
app.use(express.static(__dirname +'/ChemAlive_JS'));
app.get('/', function(req, res) {

    res.sendFile('/home/laetitia/Project/ChemAlive_Interface_Node/ChemAlive_Interface.html');
});

app.listen(8080);

在.html中,我仍然有:

<body onload="ketcher.init();">

但我要加载的功能不再加载。

有什么线索吗?

谢谢


问题答案:

您没有在问题中提供很多信息,但是根据您提供的信息,我几乎没有什么建议:

意见建议

而不是增加很多express.static用途:

app.use(express.static(__dirname + '/images'));
app.use(express.static(__dirname + '/CSS'));
app.use(express.static(__dirname + '/font'));
app.use(express.static(__dirname ));
app.use(express.static(__dirname +'/ketcher'));
app.use(express.static(__dirname +'/ChemAlive_JS'));

将您要提供的文件(和目录)放入一个目录(例如)static,并使用express.static一次:

app.use(express.static(__dirname + '/static'));

或更妙的是,使用path模块:

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

您首先需要使用以下path模块:

var path = require('path');

现在,不要通过以下方式为'/'路由提供单个文件:

app.get('/', function(req, res) {
    res.sendFile('/home/laetitia/Project/ChemAlive_Interface_Node/ChemAlive_Interface.html');
});

只需将该文件static作为index.html 放入目录中,即可由express.static中间件自动提供。

基本原理

当前配置它的方式是,例如,每个人都可以下载您的Node应用程序- app.js包括其所有配置甚至子模块等。

另外,通过express.static多次使用中间件,我怀疑您不确定这些目录中的文件将如何映射到URL。

将静态文件放在一个位置可以轻松地验证任何脚本标签是否具有正确的路径等。

我猜

您没有提供足够的信息来确保确定,但是我的猜测是主H​​TML文件的JavaScript文件未正确加载,但是您没有提供足够的信息来确定。

您可以在浏览器中打开开发人员工具控制台,并在控制台打开时重新加载页面,查看是否有错误。

我怀疑该ketcher.init()方法正在运行,但是该方法或ketcher对象未定义,因为某些<script>标签无法加载。

遵循我的建议后的完整示例将更加简单:

var path = require('path');
var express = require ('express');
var app = express();
app.use(express.static(path.join(__dirname, 'static')));
app.listen(8080);

也许我会添加一些输出以查看发生了什么:

var path = require('path');
var express = require ('express');
console.log('starting app.js');
var app = express();
app.use(express.static(path.join(__dirname, 'static')));
app.listen(8080, function () {
    console.log('listening on http://localhost:8080/');
});

现在,您可以将所有可提供给浏览器的文件放在一个位置:static在本示例中的目录中。

工作应用

您可以在GitHub上看到我的工作正常的Express应用程序示例,该示例提供静态文件:

  • https://github.com/rsp/node-express-static-example

在此示例中,将调用静态文件的目录,html但是您可以根据需要调用它,只要它与您使用express.static中间件的方式一致即可。

您可以从此示例项目开始,然后将自己的文件放入express.static被告知查找要提供文件的目录中。

您还可以更改端口号以满足您的需求。

有和没有Express的情况下都有更多示例可做,另外还有更好的解释:

  • https://github.com/rsp/node-static-http-servers

更多提示

如果页面正在等待加载某些资源,则可能不会触发onload回调。

要查看是否触发了onload回调,可以将其更改为:

<body onload="alert('onload callback fired');">

此外,ketcher对象可能未初始化或没有init()方法。加载页面后,您可以打开JavaScript控制台并尝试手动运行该方法,以查看如果被触发该方法是否可以工作:

ketcher.init();

您也可以尝试以下命令:

console.dir(ketcher.init);
console.dir(ketcher);
console.log(typeof ketcher.init);
console.log(typeof ketcher);

查看ketcher对象是否包含应包含的内容。

即使GET localhost:8080/ketcher.js状态为200
OK,它仍然可以加载一些其他不可用的资源,或者res.sendFile()(使用这种情况下提供文件的代码很常见)(虽然在这种情况下不太可能),但是它可以提供HTML而不是JavaScript并导致<字符上的神秘解析错误-



 类似资料:
  • 我有节点14.13.0,并且即使使用,top-level wait也不能工作。 我做错了什么?

  • 问题内容: 嗨,我只是简单地尝试在www.example.com上获取h1标签,该标签显示为“ Example Domain”。该代码适用于http://www.example.com,但不适用于https://www.exmaple.com。我该如何解决这个问题?谢谢 问题答案: PhantomJSDriver不支持(所有)DesiredCapabilities。 你会需要: 记录在这里:htt

  • 所以我使用这种方法写入文件,它在windows上运行完全正常,但在mac上运行时,它会创建文件,但它们是空的。 我知道数据是正确的,因为它打印正确。感谢您的任何帮助,这真的让我绊倒了。

  • 我刚刚创建了我的第一个(定制)蒸馏器。我上传了一个包含索引的zip文件,在Lambda中设置了这个函数。js和所有必需的代码,包括node_模块和基本的Alexa技能,我的孩子(根据教程)。我确保我压缩了文件和子文件夹,而不是文件夹本身(正如我所见,这是导致类似错误的常见原因),但当我用一个示例话语在网络工具中创建技能和测试时,我得到: 无法调用远程终结点,或者它返回的响应无效。 我不知道如何调试

  • 列名称的类型为int[] 上述查询适用于postgresql,但不适用于hsqldb,甚至适用于sql 尝试的hsqldb版本:2.2.9和2.3.0 在hsqldb中工作的sql是从table_name中选择x,unnest(column_name)y(x)x和y不是该表的列。

  • 我能够成功地打电话给邮递员: /mfp/api/az/v1/token和 /mfpadmin/management-apis/2.0/runtimes/mfp/applications 我正在获取从/mfp/api/az/v1/token接收的承载令牌,并将其添加到/mfp/applications的授权标头中。 我收到了来自两者的200个响应,并从每个API中获取了预期的信息。 然后,我选择从P