使用静态站点时如何使用Express处理路由?

时间:2019-06-30 18:37:03

标签: javascript html node.js express http

当用户转到mydomain.com/game时,我希望用户查看我的公用文件夹中显示的内容。当我这样做时,这完全可以正常工作:

app.use('/game', express.static('public'))

问题是我想从URL中提取一些信息,但是由于我不知道在使用静态站点时如何继续路由,因此无法提取任何信息。例如,如果用户输入mydomain.com/game/123,我想检索123,但仍然像mydomain.com/game一样将该人路由到我的公用文件夹。

关于如何处理此问题的任何想法?

3 个答案:

答案 0 :(得分:1)

这在类似情况下对我也有用

app.use('/game/:id', (req, res) => {
  // do something with id
  res.redirect(302, '/game');
}

答案 1 :(得分:0)

尝试使用两种中间件:第一个是您的静态中间件,第二个是后备,id为(123)

app.use('/game', express.static('public'));
app.use('/game/:id', function(req, res) { // when static not found, it passed to this middleware, this process it
    console.log('your id', req.params.id);
    res.send('ok');
});

答案 2 :(得分:0)

如果您使用的是React静态文件,并且想使用express服务所有的React路由,那么您必须执行以下操作-

1。首先,必须在react文件夹中运行命令

npm run build

这将在react应用中创建您的构建文件夹,其中包含一个index.html文件,您必须通过express服务。 现在进入您的server.js文件并在其中写入

const express = require('express');
var path = require('path');

const app = express();
app.use(express.static(path.join(__dirname, 'client/build')));
app.get('*', (req,res) => {
    res.sendFile(path.join(__dirname+'/client/build/index.html'));
});
const port = process.env.PORT || 5000;
app.listen(port, () => console.log(`Server up and running on port ${port} !`));