Project N.E.K.O.

Project N.E.K.O.

View Stats:
GPT-SoVITS的api_neko服务webUI无法显示
api服务可以正常启动,猫娘那边也能识别到,但是webUI显示不了,浏览器打开http://localhost:9881/为空白,浏览器开发者工具报错CyWKjLMZ.js:1 Failed to load module script: Expected a JavaScript-or-Wasm module script but the server responded with a MIME type of "text/plain". Strict MIME type checking is enforced for module scripts per HTML spec.
< >
Showing 1-1 of 1 comments
和ai大战了一番,修好了,以下是解决过程:

问题分析
- 问题现象 :WebUI 显示空白,浏览器开发者工具显示 MIME 类型错误
- 错误信息 : Failed to load module script: Expected a JavaScript-or-Wasm module script but the server responded with a MIME type of "text/plain"
- 根本原因 :FastAPI 的静态文件服务默认将 JavaScript 文件的 MIME 类型设置为 "text/plain",而不是 "application/javascript",导致浏览器无法正确加载模块脚本

解决方案
我修改了 server.py 文件,为 /_nuxt 路径添加了专门的路由处理,确保 JavaScript 文件返回正确的 MIME 类型:

1. 移除了原来的 StaticFiles 挂载
2. 添加了 @app.get("/_nuxt/{file_path:path}") 路由,专门处理 _nuxt 目录下的静态资源
3. 在路由处理函数中,为 JavaScript 文件设置正确的 Content-Type: application/javascript 响应头

验证结果
我使用 Invoke-WebRequest 命令测试了修复效果,确认 JavaScript 文件现在正确返回 Content-Type: application/javascript

主要修改的是api_neko/server.py的160行到180行这里
if _FRONTEND_DIST.is_dir():
# 为 _nuxt 路径添加专门的路由处理,确保 JavaScript 文件的 MIME 类型正确
@app.get("/_nuxt/{file_path:path}")
async def nuxt_assets(file_path: str):
"""处理 _nuxt 目录下的静态资源,确保 JavaScript 文件的 MIME 类型正确"""
file = _FRONTEND_DIST / "_nuxt" / file_path
if not file.is_file():
return FileResponse(_FRONTEND_DIST / "index.html")

# 为 JavaScript 文件设置正确的 MIME 类型
if file.suffix == '.js':
from fastapi.responses import Response
with open(file, 'rb') as f:
content = f.read()
return Response(content, media_type='application/javascript')

# 其他文件使用默认的 FileResponse
return FileResponse(file)
< >
Showing 1-1 of 1 comments
Per page: 1530 50