我在heroku GET https://my-app.herokuapp.com/index.js 404 (Not Found)
我的Procfile中有这个:web: npm start
然后在我的package.json中我有"start": "node ./app/index.js"
我的根级别的app文件夹包含index.js
,其中包含:
var express = require('express');
var app = express();
app.use('/', express.static('public'));
app.get('/', function(req, res) {
res.sendFile(__dirname + '/index.html');
});
app.listen(process.env.PORT || 8080);
和我的webpack.config.js
文件包含:
var path = require('path');
const webpack = require('webpack')
module.exports = {
entry: './main.js',
output: {
path: path.resolve(__dirname, 'public'),
filename: 'index.js'
},
module: {
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel',
query: {
presets: ['es2015', 'react', 'stage-2']
}
},
{
test: /\.scss$/,
loaders: ["style-loader", "css-loader", "sass-loader"]
}
]
}
}
也许我需要将它指向我的public/index.js
文件,但是当我这样做时它仍然无法识别它。
任何想法?
答案 0 :(得分:2)
这是对节点和/或服务器如何工作的误解。您应该可以转到GET https://my-app.herokuapp.com/
,它将返回位于公用文件夹中的index.html
文件。告诉节点以"start": "node ./app/index.js"
开头只是意味着运行此文件来启动服务器。服务器而不是侦听您定义的路由:
app.get('/', function(req, res) {
res.sendFile(__dirname + '/index.html');
});
这是在路径https://my-app.herokuapp.com/
如果您想收听https://my-app.herokuapp.com/anotherroute
,则可以更改之前的内容:
app.get('/anotherroute', function(req, res) {
res.sendFile(__dirname + '/index.html');
});
由于您使用了app.use('/', express.static('public'));
,因此将自动提供与您的路线匹配的所有文件。这意味着如果public
目录中有apple.jpg
目录中的文件,则可以使用https://my-app.herokuapp.com/apple.jpg