Подключение рабочей сборки React к Express Gateway

#node.js #reactjs #express #mern #express-gateway

#node.js #reactjs #экспресс #mern #экспресс-шлюз

Вопрос:

Наша сборка для разработки React работает безупречно с настройкой Express Gateway на localhost. После сборки React для производства и при запуске serve -s build появляется страница входа в систему, поскольку она является точкой входа в приложение. Он получает ответ 200 ok, когда мы вводим учетные данные для входа. Но когда мы посмотрели на это, мы увидели, что запрос на сервер не был успешным, потому что токен, который он сохраняет в приложении браузера, не определен, и мы проверили ответ, это «Вам нужно включить javascript …». JS включен, без сомнения. Я проверил, используя

 axios.post('http://localhost:8080/api/v1/auth/sign-in', userData)
 

Он работает нормально, но при настройке прокси:
axios.post(‘/ auth / sign-in’, пользовательские данные)
react не запускается
Вот часть yml для настройки Express gateway:

 http:
port: 8080
apiEndpoints:
 auth-service:
  host: "*"
  paths: ["/api/v1/auth/*", "/api/v1/auth"]
 mail-service:
  host: "*"
  paths: ["/api/v1/mail/*", "/api/v1/mail"]
serviceEndpoints:
 auth-service-endpoint:
  url: http://localhost:3003/
 mail-service-endpoint:
  url: http://localhost:3005/
policies:
 - proxy
pipelines:
 auth-service-pipeline:
  apiEndpoints:
   - auth-service
  policies:
   - proxy:
      action:
        serviceEndpoint: auth-service-endpoint
        changeOrigin: true
        stripPath: true
  mail-service-pipeline:
   apiEndpoints:
    - mail-service
   policies:
    - proxy:
      action:
        serviceEndpoint: mail-service-endpoint
        changeOrigin: true
        stripPath: true
 

Я поместил setupProxy.js в каталоге src для React:

 const { createProxyMiddleware } = require('http-proxy-middleware');
module.exports = function(app) {
app.use(createProxyMiddleware('/api/v1', 
    { target: 'http://localhost:8080',
     secure: false,
     changeOrigin: true,
    // pathRewrite: {
    //   "^/api": "/api/v1",
    // }
}
));
 

}

В настоящее время все находится на одном компьютере. Мы не используем docker. Приложение работает в среде разработки, но показывает 200 ok в рабочей сборке Любая помощь будет оценена.

[Править / править код]

 krypton:admin-dashboard-server hasan$ curl -v http://localhost:3001/find_all_services/1/10
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 3001 (#0)
> GET /find_all_services/1/10 HTTP/1.1
> Host: localhost:3001
> User-Agent: curl/7.54.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Access-Control-Allow-Origin: *
< X-DNS-Prefetch-Control: off
< X-Frame-Options: SAMEORIGIN
< Strict-Transport-Security: max-age=15552000; includeSubDomains
< X-Download-Options: noopen
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Content-Type: application/json; charset=utf-8
< Content-Length: 1833
< ETag: W/"729-LM91B3vCUrbvesBrp32ykiXXkQo"
< Date: Tue, 12 Jan 2021 14:57:24 GMT
< Connection: keep-alive
< 
* Connection #0 to host localhost left intact
[{"id":1,"name":"Laser Hair Remove"},
 {"id":2,"name":"Facial Treatments"}
]

krypton:admin-dashboard-server hasan$ curl -v 
http://localhost:8080/api/v1/services/find_all_services/1/10
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET /api/v1/services/find_all_services/1/10 HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.54.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< access-control-allow-origin: *
< x-dns-prefetch-control: off
< x-frame-options: SAMEORIGIN
< strict-transport-security: max-age=15552000; includeSubDomains
< x-download-options: noopen
< x-content-type-options: nosniff
< x-xss-protection: 1; mode=block
< content-type: application/json; charset=utf-8
< content-length: 1833
< etag: W/"729-LM91B3vCUrbvesBrp32ykiXXkQo"
< date: Tue, 12 Jan 2021 15:03:45 GMT
< connection: keep-alive
< 
* Connection #0 to host localhost left intact
[{"id":1,"name":"Laser Hair Remove"},
 {"id":2,"name":"Facial Treatments"}
]


krypton:admin-dashboard-server hasan$ curl -v -H "Content-Type: application/json" -X POST -d 
'{"email":"mh.mithun@gmail.com","password":"safe123"}' 
http://localhost:8080/api/v1/auth/sign-in
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> POST /api/v1/auth/sign-in HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.54.0
> Accept: */*
> Content-Type: application/json
> Content-Length: 52
> 
* upload completely sent off: 52 out of 52 bytes
< HTTP/1.1 200 OK
< access-control-allow-origin: *
< x-dns-prefetch-control: off
< x-frame-options: SAMEORIGIN
< strict-transport-security: max-age=15552000; includeSubDomains
< x-download-options: noopen
< x-content-type-options: nosniff
< x-xss-protection: 1; mode=block
< content-type: application/json; charset=utf-8
< content-length: 270
< etag: W/"10e-S kd8b4Yfl7un04FVGe3MFLFEaY"
< date: Tue, 12 Jan 2021 15:40:12 GMT
< connection: keep-alive
< 
* Connection #0 to host localhost left intact
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhbGdvcml0aG0iOiJIUzI1N"

krypton:admin-dashboard-server hasan$ curl -v -H "Content-Type: application/json" -X POST -d '{"email":"mh.mithun@gmail.com","password":"safe123"}' http://localhost:3003/sign-in
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 3003 (#0)
> POST /sign-in HTTP/1.1
> Host: localhost:3003
> User-Agent: curl/7.54.0
> Accept: */*
> Content-Type: application/json
> Content-Length: 52
> 
* upload completely sent off: 52 out of 52 bytes
< HTTP/1.1 200 OK
< Access-Control-Allow-Origin: *
< X-DNS-Prefetch-Control: off
< X-Frame-Options: SAMEORIGIN
< Strict-Transport-Security: max-age=15552000; includeSubDomains
< X-Download-Options: noopen
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Content-Type: application/json; charset=utf-8
< Content-Length: 270
< ETag: W/"10e-LW/1l5fXf5BaiF3KJMvG60xRthE"
< Date: Tue, 12 Jan 2021 15:45:33 GMT
< Connection: keep-alive
< 
* Connection #0 to host localhost left intact
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhbGdvcml0aG0i"
 

Комментарии:

1. Можете ли вы использовать curl -v для связи с сервером из командной строки и публикации транзакций (включая заголовки) здесь?

2. @JamesMcLeod Пожалуйста, проверьте, я опубликовал вывод выше

3. Можете ли вы сделать то же самое с конечной точкой авторизации / входа (с отредактированной информацией аутентификации)? Я думаю, что в этом и заключается разница.

4. @JamesMcLeod Пожалуйста, проверьте