| from fastapi import FastAPI, Request, Response |
|
|
| filenames = ["js/sketch.js"] |
| contents = '\n'.join([f"<script type='text/javascript' src='{x}'></script>" for x in filenames]) |
|
|
| app = FastAPI() |
|
|
| @app.middleware("http") |
| async def insert_js(request: Request, call_next): |
| path = request.scope['path'] |
| response = await call_next(request) |
| |
| if path == "/": |
| response_body = "" |
| async for chunk in response.body_iterator: |
| response_body += chunk.decode() |
|
|
| some_javascript = """ |
| <script type="text/javascript"> |
| src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.6.0/p5.js"> |
| </script> |
| <script src="sketch.js"></script> |
| """ |
| |
| response_body = response_body.replace("</headers>", some_javascript + "</headers>") |
| response_body = response_body.replace("</body>", contents + "</body>") |
|
|
| del response.headers["content-length"] |
|
|
| return Response( |
| content=response_body, |
| status_code=response.status_code, |
| headers=dict(response.headers), |
| media_type=response.media_type |
| ) |
|
|
| return response |