react生成资产express静态文件夹不提供错误es6



嗨,我正试图从express中的静态文件夹中提供react构建资产,它使用CommonJS语法。现在我在express中使用ES6语法,它不为其他文件提供服务,但为index.html文件提供服务:

GET /?session_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImI4Y2QxNTA0LTg3YmEtNGMzMC04ZmI3LWFhZDFkZWQ0ZmFkNCIsImlhdCI6MTYwNjczODExMiwiZXhwIjoxNjA2NzQxNzEyfQ.m4Lf5mimxD_8r14bT_Npg2Ql_ZkiJrFoy6mDfdkx2Sw 200 15.099 ms - 3011
GET /static/css/main.3dccf1f1.chunk.css 404 3.406 ms - 173
GET /static/js/2.0216aaa2.chunk.js 404 1.833 ms - 168
GET /static/js/main.71c89386.chunk.js 404 17.247 ms - 171
GET /manifest.json 404 0.543 ms - 152

这是我在app.js 中的代码

import express from 'express';
import session from 'express-session';
import dotenv from 'dotenv';
import morgan from 'morgan';
import path from 'path';
import {socketListen,socketIO} from './socket/init.js';
dotenv.config({path: './config/config.env'});
import authController from './controllers/authController.js';

const app = express();
app.use(express.json());
app.use(express.urlencoded({extended: false}));
app.use(session({
resave: false,
saveUninitialized: false,
secret: process.env.SECRET_KEY,
cookie: {secure: true}
}));
app.use(morgan('dev'));
//app.use(express.static(path.join(path.dirname(new URL(import.meta.url).pathname),'public')));
app.use(express.static((path.dirname(new URL(import.meta.url).pathname) + '/public')));
app.use('/api/v1/auth',authController);

const port = process.env.PORT || 5000;
app.get(['/','/nw','/nw/*'],(req,res) => {
//res.sendFile(path.join(path.dirname(new URL(import.meta.url).pathname),'public','index.html'));
res.sendFile('index.html',{root: 'public'});
});
socketListen(4000);
socketIO.on('connect',async() => {
console.log('crypto client connected');
});
socketIO.on('event',async() => {
});
socketIO.on('disconnect',async() => {
console.log('crypto client disconnected');
});

app.listen(port, () => console.log(`server is running on port ${port}`));

这是我的文件结构:

nano_wall
- app.js
- /public
- /static
- /assets
- index.html
- asset-manifest.json
- manifest.json
- favicon.ico

我使用了path.join和path.dirname(新URL(import.meta.URL(.pathname来替换ES6的__dirname,虽然import.meta.URL代码替换了__dirname但它似乎没有正确注册express.static((,所以我使用了{root:'public'}配置选项。

所以我在玩express.static,并查看了serve static index.d.ts文件一分钟,我发现有一个dotfiles配置选项,您可以在其中决定如何配置。/在文件路径的前面处理,但我只是使用了"public",它似乎显示正确。

最新更新