NodeJS 如何为express.js设置根路由

myss37ts  于 2023-06-29  发布在  Node.js
关注(0)|答案(3)|浏览(148)

我是express.js的新手,所以这个问题可能很容易,但我花了将近4个小时才解决它。
我有我的express服务器,应该返回一个react应用程序的构建。我使用 useragent lib来返回应用程序,如果用户不是bot。
代码非常简单。

const express = require('express');
const {PORT, CLIENT_URL} = require('./constants');
const app = express();
const cookieParser = require('cookie-parser');
const passport = require('passport');
const cors = require('cors');
const useragent = require('express-useragent');

app.use(express.static("public/dist"));
app.use(useragent.express());
app.use(express.json());
app.use(cookieParser());
app.use(cors({ origin: CLIENT_URL, credentials:true }))

app.use('/api',authRoutes); //here are my api routes

app.get("/connect",async (req,res)=> {
    console.log(req.useragent.isBot)
    if (req.useragent.isBot == false){
    try{
        res.sendFile(path.resolve(__dirname,"..","public","dist","index.html"));
    } catch(err){
        res.json({
            "Error": "ERROR",
            "status": err
        })
    }
} else {
    try {
        res.status(403)     
    } catch (error) {
        res.status(403);   
    }
 }
})


const appStart = () => {
    try {
        app.listen(PORT , () => {
            console.log(`The app is running at http://localhost:${PORT}`);
        });
    } catch (error){
        console.log(`Error: ${error.message}`);
    }
};

appStart();

文件夹结构为:

  • project --public - dist
    --src - index.js
    所以问题是:当我连接到http://localhost:8080/connect时,它运行良好,并返回应用程序,因为它应该,但当我连接到http://localhost:8080/没有bot过滤器时,它也是如此,我不想要它.我知道问题出在这里app.use(express.static("public/dist"));,但我不知道如何改变它。我试图删除这一行,它的工作,但未能加载一些资产的一些原因。我也把dist从公众中删除了,但没有帮助。
    就像
app.use('/', async (req,res) => {
    res.json({
        "status": 403 
    })
    
})

封锁整个应用程序。请帮帮忙:-)

w8ntj3qf

w8ntj3qf1#

无论何时使用app.use('/', router),第二个参数必须是路由器。对于您的特定场景,您可以使用`app.get()。更新你的代码如下:

app.get('/', async (req,res) => {
    res.json({
        "status": 403 
    })
    
})

另外,删除以下行:

app.use(express.static("public/dist"))
jmo0nnb3

jmo0nnb32#

const express = require('express');
const { PORT, CLIENT_URL } = require('./constants');
const app = express();
const path = require('path');
const cookieParser = require('cookie-parser');
const passport = require('passport');
const cors = require('cors');
const useragent = require('express-useragent');

app.use(useragent.express());
app.use(express.json());
app.use(cookieParser());
app.use(cors({ origin: CLIENT_URL, credentials: true }));

app.use('/api', authRoutes); // Your API routes go here

app.get('/connect', (req, res) => {
  console.log(req.useragent.isBot);
  if (!req.useragent.isBot) {
    try {
      res.sendFile(path.resolve(__dirname, '..', 'public', 'dist', 'index.html'));
    } catch (err) {
      res.json({
        Error: 'ERROR',
        status: err,
      });
    }
  } else {
    try {
      res.status(403).send('Forbidden');
    } catch (error) {
      res.status(403).send('Forbidden');
    }
  }
});

app.listen(PORT, () => {
  console.log(`The app is running at http://localhost:${PORT}`);
});

以下是已更改的内容:

app.use(express.static(“public/dist”));行从代码中删除。这可以确保默认情况下不会为所有路由提供public/dist目录中的静态文件。
添加/connect路由是为了在用户代理不是bot时处理React应用的请求。sendFile方法用于从public/dist目录发送index.html文件。
listen方法被移到app.get('/connect',...)路由之外。这样可以确保服务器已启动并侦听指定的端口。
通过这些更改,React应用构建将仅在访问/connect路由时提供。对于根URL(http://localhost:8080/),将应用默认行为,这可能是发送不同的响应或根据您的要求在另一个路由中处理它。

sxpgvts3

sxpgvts33#

把这个换了

app.use('/', async (req,res) => {
    res.json({
        "status": 403 
    })  
})

app.get('/', async (req,res) => {
    res.json({
        "status": 403 
    })  
})

相关问题