我是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
})
})
封锁整个应用程序。请帮帮忙:-)
3条答案
按热度按时间w8ntj3qf1#
无论何时使用
app.use('/', router)
,第二个参数必须是路由器。对于您的特定场景,您可以使用`app.get()。更新你的代码如下:另外,删除以下行:
jmo0nnb32#
以下是已更改的内容:
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/),将应用默认行为,这可能是发送不同的响应或根据您的要求在另一个路由中处理它。
sxpgvts33#
把这个换了
到