从express/node.js应用程序提供静态文件

从express/node.js应用程序提供静态文件,express,heroku,Express,Heroku,嗨,我是一个新手,最近开始学习node。我参加了一个关于websockets()的Heroku教程,并将其改编为我正在从事的一个特定项目。在示例代码中,只有一个index.html文件,其中包含一些嵌入式javascript。我将这个脚本移到一个单独的文件中,并在HTML中引用它。在本地一切都很好,但在部署到Heroko时却不起作用。我和Heroku非常有帮助的团队聊天,他们告诉我,我的服务器端代码将所有文件作为HTML提供,我需要更改代码。他们给了我一些建议,几天来我尽可能多地尝试了一些东西,

嗨,我是一个新手,最近开始学习node。我参加了一个关于websockets()的Heroku教程,并将其改编为我正在从事的一个特定项目。在示例代码中,只有一个index.html文件,其中包含一些嵌入式javascript。我将这个脚本移到一个单独的文件中,并在HTML中引用它。在本地一切都很好,但在部署到Heroko时却不起作用。我和Heroku非常有帮助的团队聊天,他们告诉我,我的服务器端代码将所有文件作为HTML提供,我需要更改代码。他们给了我一些建议,几天来我尽可能多地尝试了一些东西,但都没有用。最后,他们建议来到这个论坛作为解决问题的一种方式,因为这超出了他们的范围。提供index.html文件的现有代码如下所示:

const express = require('express');
const SocketServer = require('ws').Server;
const path = require('path');
const PORT = process.env.PORT || 3000;
const INDEX = path.join(__dirname, 'index.html');
const server = express()
.use((req, res) => res.sendFile(INDEX) )
.listen(PORT, () => console.log(Listening on ${ PORT }));
首先,我编辑了这一行:

app.use(express.static('public'))
但这不起作用。然后我做了如下修改,但仍然不起作用:

const INDEX = path.join(__dirname, 'index.html');
const JS = path.join(__dirname, 'client.js');

const server = express()
.use((req, res) => {
res.sendFile(INDEX);
res.sendFile(JS);
我已经看过其他教程,当我单独运行它们时,它们可以工作,但当我尝试调整我的上述代码时,它根本不起作用。如果有人能给我指出正确的方向,我将不胜感激

顺便说一句,这是Heroku告诉我的:

“为了进一步解释此错误,Uncaught SyntaxError:Unexpected token<是因为的URL没有提供javascript文件,而是试图提供主页的HTML。这表明您的应用程序中存在路由问题,您需要对此进行检查。这可能是因为您的server.js文件在发送index.html文件之前没有检查任何特定URL。”


谢谢

我提供的静态文件如下:

// define the folder that will be used for static assets
app.use(Express.static(path.join(__dirname, '../public')));

// handle every other route with index.html, which will contain
// a script tag to your application's JavaScript file(s).
app.get('*', function (request, response){
    response.sendFile(path.resolve(__dirname, '../public', 'index.html'));
});
通过这种方式,我在express.static中间件中设置静态文件夹,以便为文件提供服务,然后将所有url请求重定向到index.html


要了解更多信息:

您好,谢谢您的回复。我最终利用您的建议使其正常工作,但首先我必须重写代码,以删除导致我出现问题的javascript 6语法。如果有人感兴趣,工作代码如下:app.use('/',express.static(u_dirname));app.get('/',function(req,res){res.sendFile(INDEX);})var server=app.listen(端口,函数(){console.log(“侦听端口:”+PORT);})