Javascript 配置Express为每个url发送index.html,但以.css和.js结尾的url除外

Javascript 配置Express为每个url发送index.html,但以.css和.js结尾的url除外,javascript,node.js,express,Javascript,Node.js,Express,我是个新手,我正在尝试建立一个SPA,其中每个url都由index.html(主干)处理 我希望每个url都向下发送index.html,除了/bundle.js和/style.css——或者更好的是,任何表示文件(以.xyz结尾)的url 我试过: app.get('*', function(req, res) { res.sendfile(__dirname+'/public/index.html'); }; 但这会将bundle.js和index.html的内容一起发送下来。我该

我是个新手,我正在尝试建立一个SPA,其中每个url都由index.html(主干)处理

我希望每个url都向下发送index.html,除了/bundle.js和/style.css——或者更好的是,任何表示文件(以.xyz结尾)的url

我试过:

app.get('*', function(req, res) {
    res.sendfile(__dirname+'/public/index.html');
};

但这会将bundle.js和index.html的内容一起发送下来。我该如何做到这一点?

我相信有两种方法可以解决这一目标,第一种可能更可取。如果您可以移动
bundle.js
style.css
,请将它们以及任何其他静态文件放置在
public
目录中,并使用以下方法静态服务
public
中的所有文件:

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

app.get('*', function(req, res){
  res.sendfile(__dirname + '/public/index.html');
});
这种方法更可取,因为当您将新的静态文件放置在
public
目录中时,它将“正常工作”。然后,您应该能够访问这些静态文件(或根据您选择的层次结构访问相应的子文件夹)

或者,您可以保持文件结构不变,并使用定义路由的顺序来完成类似的行为,尽管它没有那么灵活,基本上是静态定义的:

app.get('/bundle.js', function(req, res){
  res.sendfile(__dirname + '/bundle.js');
});

app.get('/style.css', function(req, res){
  res.sendfile(__dirname + '/style.css');
});

app.get('*', function(req, res){
  res.sendfile(__dirname + '/public/index.html');
});

我用这种方法解决了这个问题:

const getExtension=fileName=>(
fileName.substr(fileName.lastIndexOf('.')+1)
)
app.get('*',({url},res)=>{
让文件路径
如果(['js','css','png','jpg'].includes(getExtension(url))){
文件路径=uu dirname+'/public/'+url
}否则{
filePath=uu dirname+'/public/'+url+'/index.html'
}
res.sendFile(文件路径)
});

谢谢!!!所有静态资产都在/public/中,但我在app.get之后使用了我的app.use!谢谢没有问题。请注意,在Express 4x中,我相信相同的声明顺序适用于所有
应用程序。使用
调用。