如何在Heroku中修复window.open()?

时间:2018-09-12 03:36:38

标签: javascript html node.js heroku

我正在尝试使用Node.js在Heroku上托管一个网页。是的,我了解php方法,但是我想用Node来做。到目前为止,它确实运行良好,只有一个小问题。

我的Procfile如下: web: node main.js

我的main.js文件: window.open("index.html", "_self");

我的index.html文件很好,可以连接到其余文件,但是它很长,所以我真的不想在这里发布它。

我有一个package.json等,但是当我尝试部署该应用程序时弹出以下错误消息。

State changed from crashed to starting
2018-09-12T03:23:22.000000+00:00 app[api]: Build succeeded
2018-09-12T03:23:24.424276+00:00 heroku[web.1]: Starting process with command `node main.js`
2018-09-12T03:23:26.694405+00:00 heroku[web.1]: Process exited with status 1
2018-09-12T03:23:26.710365+00:00 heroku[web.1]: State changed from starting to crashed
2018-09-12T03:23:26.630643+00:00 app[web.1]: /app/main.js:1
2018-09-12T03:23:26.630664+00:00 app[web.1]: (function (exports, require, module, __filename, __dirname) { window.open("index.html", "_self");
2018-09-12T03:23:26.630666+00:00 app[web.1]:                                                               ^
2018-09-12T03:23:26.630668+00:00 app[web.1]: 
2018-09-12T03:23:26.630670+00:00 app[web.1]: ReferenceError: window is not defined
2018-09-12T03:23:26.630671+00:00 app[web.1]:     at Object.<anonymous> (/app/main.js:1:63)
2018-09-12T03:23:26.630672+00:00 app[web.1]:     at Module._compile (module.js:653:30)
2018-09-12T03:23:26.630674+00:00 app[web.1]:     at Object.Module._extensions..js (module.js:664:10)
2018-09-12T03:23:26.630676+00:00 app[web.1]:     at Module.load (module.js:566:32)
2018-09-12T03:23:26.630677+00:00 app[web.1]:     at tryModuleLoad (module.js:506:12)
2018-09-12T03:23:26.630679+00:00 app[web.1]:     at Function.Module._load (module.js:498:3)
2018-09-12T03:23:26.630680+00:00 app[web.1]:     at Function.Module.runMain (module.js:694:10)
2018-09-12T03:23:26.630682+00:00 app[web.1]:     at startup (bootstrap_node.js:204:16)
2018-09-12T03:23:26.630684+00:00 app[web.1]:     at bootstrap_node.js:625:3

显然,这意味着它无法识别“窗口”,但我不知道如何解决此问题。如果有人有答案,我将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

在Heroku上运行时,您使用的是NodeJS,而不是浏览器中的Javascript。节点中没有window。因此,您不能使用window.open

var http = require('http');
var fs = require('fs');

var html = fs.readFileSync('index.html');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end(html);
}).listen(process.env.PORT || 5000);

这将在端口$ PORT或5000上启动Web服务器,并在所有请求上提供index.html文件。 它应该可以在Heroku上按原样工作。