node.js - Docker 和反应代理
问题描述
问题是这样的:我想从节点上运行的后端获取 jwt 令牌。我仍在学习这些东西(来自 php 背景),但如果我理解正确,为了使用 httpOnly cookie,我必须为后端和前端使用相同的 url。这就是为什么我试图在我的反应应用程序中使用代理。
后端和前端在不同的 docker 容器中运行(它们是完全独立的存储库,每个都有自己的 docker-compose 文件)。它们也通过网络连接。
总结一下,到目前为止我所做的事情
- 在反应应用程序中安装了 http-proxy-middleware
- 配置代理如下:
const { createProxyMiddleware } = require("http-proxy-middleware");
module.exports = function (app) {
app.use(
createProxyMiddleware("/api/*", { target: "http://nodebackend:33445" })
);
};
在节点服务器内部,我配置了路由:
module.exports = app => {
const users = require("../controllers/user.controller.js");
const auth = require("../middleware/auth");
... various other routes ...
app.post("/api/login", users.login)
};
Docker-compose.yml 用于后端:
version: '3.7'
services:
nodeserver:
image: node:14
ports:
- 33445:8080
working_dir: /app
command: npm start
volumes:
- ./app:/app
- ./app/node_modules:/app/node_modules
networks:
- mainnet
container_name: nodebackend
... other services such as mysql ...
networks:
mainnet:
driver: bridge
和前端部分的 Docker-compose.yml:
version: '3.7'
services:
frontend:
image: node:14
ports:
- 3001:3000
working_dir: /src
command: npm start
volumes:
- ./:/src
networks:
- mainnet
networks:
mainnet:
external: true
它们似乎已正确连接到网络中(当我执行 docker network inspect 时,我看到了那里的容器)邮递员对后端的请求也有效(我可以收到 jwt 令牌作为响应)。这样那部分就可以正常工作
在反应应用程序中,我有以下代码:
const submitLogin = (event) => {
event.preventDefault();
const requestOptions = {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ email: "test@test.com", password: "test" }),
};
fetch("/api/login", requestOptions)
.then((response) => response.json())
.then((data) => {
...do something with the data
});
};
我已经坚持了好几天了。无论我做什么,我都会收到:
Error occured while trying to proxy: localhost:3001/api/login
有人可以指出我正确的方向,我做错了什么?
解决方案
推荐阅读
- r - R中的展开列会产生内存不足
- jpa - 从终端运行节点时获取“java.lang.IllegalStateException:期望在当前链上找到事务集”
- python - 逐行查找与二维数组条件匹配的元素索引
- c# - 将多封邮件移动到不同商店中的文件夹
- python - 如何设置pyqtgraph轴标签偏移量?
- excel - 如何修复使用 CTRL+ALT+F9 而非 F9 计算的公式
- .net - 在无浏览器环境中获取 gmail 访问令牌并发送电子邮件
- html - 如何通过一个日期选择器设置两个输入字段
- python - 使用 discord.py rewrite 创建即时邀请,似乎无法做到没有错误
- ruby-on-rails - API 请求规范与请求规范