我正在尝试使用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
显然,这意味着它无法识别“窗口”,但我不知道如何解决此问题。如果有人有答案,我将不胜感激。谢谢!
答案 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上按原样工作。