针对如何使用http-proxy-middleware?客户端和服务器api没有通信和调用http服务这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展->middleware(['api']
针对如何使用http-proxy-middleware?客户端和服务器 api 没有通信和调用http服务这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展-> middleware(['api'])和-> middleware(['auth:api'])有什么区别?、browser-sync + http-proxy-middleware 配置代理跨域、browserSync+http-proxy-middleware配置跨域代理、Browsersync使用http-proxy-middleware转发请求到mock服务器等相关知识,希望可以帮助到你。
本文目录一览:- 如何使用http-proxy-middleware?客户端和服务器 api 没有通信(调用http服务)
- -> middleware(['api'])和-> middleware(['auth:api'])有什么区别?
- browser-sync + http-proxy-middleware 配置代理跨域
- browserSync+http-proxy-middleware配置跨域代理
- Browsersync使用http-proxy-middleware转发请求到mock服务器
如何使用http-proxy-middleware?客户端和服务器 api 没有通信(调用http服务)
如何解决如何使用http-proxy-middleware?客户端和服务器 api 没有通信?
我们目前遇到一个问题,即客户端和服务器之间没有发生 API 通信。 先说一下服务器结构。 Client使用React(CRA)进行部署,已经通过Netify进行部署。 此外,http-proxy-middleware 模块用于解决 cors 问题,Proxy 目标 URI 使用部署到 Heroku 的 URI(例如:https://example-log.herokuapp.com/))。
src/setupProxy.js
const { createProxyMiddleware } = require("http-proxy-middleware");
module.exports = function (app) {
app.use(
createProxyMiddleware("/api",{
target: "https://devlog-ad.herokuapp.com/",changeOrigin: true,})
);
};
服务器部署在 Node.js 中,并使用 Heroku 部署。 并且我用Postman测试了我在服务器上设计的API地址,DB列表出来的很好。
问题是现在。 如果客户端是本地的,并且只有 Proxy 目标地址部署到 Heroku,则通信将正常工作。 由于与 Postman 的沟通良好,我们认为 Heroku 没有问题。 但是,如果您尝试使用部署在 Netify 上的 Client 与服务器通信,则会出现以下错误并且无法通信: 如果我遗漏了什么,请告诉我。
error
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
-> middleware(['api'])和-> middleware(['auth:api'])有什么区别?
如何解决-> middleware([''api''])和-> middleware([''auth:api''])有什么区别??
如果我查看Laravel身份验证页面,我会发现一篇说中间件([''api''])和一篇说中间件([''auth:api''])的文章。
哪个正在使用auth.PHP?
解决方法
名为api
的中间件是一个中间件组,而不是单个中间件。在app/Http/Kernel.php
的{{1}}中定义。
名为protected $middlewareGroups
的中间件是一个带有一个或多个参数的中间件。 auth
表示您正在指示auth:api
中间件使用auth
身份验证保护。此防护在api
中定义。 config/auth.php
中间件在auth
数组的app/Http/Kernel.php
中定义,该数组显示了它所引用的类。它是您的应用程序的身份验证中间件。
browser-sync + http-proxy-middleware 配置代理跨域
写代理js文件下面是文件内容
1 /**
2 * Module dependencies.
3 */
4 var browserSync = require(''browser-sync'').create()
5 var proxy = require(''http-proxy-middleware'') // require(''http-proxy-middleware'');
6
7 /**
8 * Configure proxy middleware
9 */
35 var jsonPlaceholderProxy = proxy(''/api'', {
36 target: ''http://127.0.0.1:5000'',
37 changeOrigin: true, // for vhosted sites, changes host header to match to target''s host
38 pathRewrite: {
39 ''^/api'': ''''
40 },
41 logLevel: ''debug''
42 })
43
44 /**
45 * Add the proxy to browser-sync
46 */
47 browserSync.init({
48 server: {
49 baseDir: ''./'',
50 middleware: [jsonPlaceholderProxy]
51 },
52 port: 8080,
53 startPath: ''/''
54 })
55
56 console.log(''[DEMO] Server: listening on port 8080'')
随后在package.json中配置script字段,npm启动此代理即可,
注意,此处我遇到一个坑,下面参考资料的port:8080写在init函数server选项里面的话,启动出来的端口是一个随机分配的端口
并不是我们配置的8080口,需要把port选项发到server平级即可启动对应端口
参考资料
https://github.com/chimurai/http-proxy-middleware/blob/master/examples/browser-sync/index.js
browserSync+http-proxy-middleware配置跨域代理
angular.js+gulp项目中配置跨代理 gulpfile.js中代码如下:
var browserSync = require(''browser-sync'');
var proxyMiddleware = require(''http-proxy-middleware'');
gulp.task(''browserSync'', function () {
var middleware = proxyMiddleware(''/cgi'', {
target: target, // 目标地址
changeOrigin: true, // 是否允许跨域
logLevel: ''debug'' ,
pathRewrite: {
''^/cgi'': ''/cgi'' //重写
}
});
browserSync.init({
port: 8080 // 修改端口为8080
server: {
baseDir: ''./'',
port: 4444,
middleware: [middleware], //引用middleware
}
});
});
gulp.task(''dev'', [''browserSync'', ''dev:watchcxdataAPP'']);
转自 https://github.com/chimurai/http-proxy-middleware/blob/master/examples/browser-sync/index.js
Browsersync使用http-proxy-middleware转发请求到mock服务器
背景
最近对项目里的老代码进行了一些优化和整改,其中一个便是对mock的优化。
老代码
方案
将mock代码先使用babel从es6编译为es5,再自己写了一个中间件mockApiMiddleware(实际就是一个方法接收处理reques,response,next),根据request从mock中获取到数据再response给前端。
browsersync示例:
const webpackDevMiddleware = require(''webpack-dev-middleware'')
const webpackHotMiddleware = require(''webpack-hot-middleware'')
module.exports = function() {
...
middleware: [
mockApiMiddleware(), // 自定义mock服务中间件
webpackDevMiddleware(params), // webpack中间件,params是webapck编译后相关路径等参数
webpackHotMiddleware(params),
]
}
弊端
- 当mock的代码改变后,需要重启(即重新babel编译原来的mock)才能刷新mock数据。
- mock中若依赖项目代码的一些常量等文件,babel还需要增加引用了的项目代码的编译,否则会报错(不支持项目的es6代码)。
新代码
方案
为了解决如上问题,决定将架构修改为:
- 解决弊端2 ==> 使用node server作为mock的服务器,和browsersync不共用服务端口,新的mock server使用4000端口(browsersync使用8080)。
- 解决弊端1 ==> 使用nodemon监听到文件修改自动重启mock服务。
- 由于现在mock服务和browsersync不在同一个端口启动,前端通过browsersync启动后发送的mock请求依旧是请求8080端口,因此新增http-proxy-middleware进行转发,将8080端口(原请求)的请求转发到4000端口(mock服务端口)。
- 根据上述方案,发现如果这样设计我们需要同时启用2个cmd窗口,为了开发方便,我们想要一条命令npm start即可。concurrently 和 npm-run-all可以解决这个问题,不需要开新的cmd窗口并行执行多条cmd命令。
实现
新建mock server
新建node服务器时,使用express、koa等能减少很多工作。由于在本次项目中,原来的mockApiMiddleware代码是可以复用的,因此简单使用node新建服务即可。
// createProxyMiddleware没有传递next,这里只是为了兼容老代码
const next = () => {
info(`can not find in mock data.`)
}
// 获取mock数据的业务代码
const mockApiMiddleware = function (req, res) {
info(`Request Method-> ${req.method}, URL -> ${req.url}`)
const mockArray = mocker.getMocks()
if (req.method.toUpperCase() === ''GET'') {
handleGetRequest(req, res, next, mockArray)
} else if (req.method.toUpperCase() === ''POST'' || req.method.toUpperCase() === ''PUT'') {
handlePostRequest(req, res, next, mockArray)
} else if (req.method.toUpperCase() === ''PATCH'') {
handlePatchRequest(req, res, next, mockArray)
}
}
const server = http.createServer((req, res) => {
mockApiMiddleware(req, res)
})
server.listen(4000)
info(`mock server start on port 4000. \r\n\r\n`)
nodemon启动mock
在package.json的scripts中新增如下配置,npm run mock启动服务后,watch的文件改变时,自动重启。
-w 配置监听的文件,监听多个文件时用多个-w表示。
./mock/server.js 是启动服务的文件
--exec配置为使用babel-node运行(es6文件可以直接执行,不用babel预编译)
"mock": "nodemon --legacy-watch -w ./mock -w [other watch files] ./mock/server.js --exec babel-node"
browsersync示例
http-proxy-middleware 1.0+版本中,使用createProxyMiddleware方法新建转发中间件。
const webpackDevMiddleware = require(''webpack-dev-middleware'')
const webpackHotMiddleware = require(''webpack-hot-middleware'')
const { createProxyMiddleware } = require(''http-proxy-middleware'')
module.exports = function() {
...
middleware: [
webpackDevMiddleware(params), // webpack中间件,params是webapck编译后相关路径等参数
webpackHotMiddleware(params),
createProxyMiddleware(''/api/v1'', { // 路径匹配
target: ''http://localhost:4000'', // 要转发的目标地址
changeOrigin: true, // for vhosted sites, changes host header to match to target''s host
}),
]
}
npm run同时执行多个
concurrently 和 npm-run-all同样有用,项目中已经有npm-run-all,因此选择了它。
--parallel参数表示并发执行
gulp-dev可以是任何启动前端的命令
"start":"npm-run-all --parallel mock gulp-dev"
结果
现在只需要运行npm run start,就可以同时启动2个服务啦,并且mock数据修改后立马生效,再也不用重启了。
关于如何使用http-proxy-middleware?客户端和服务器 api 没有通信和调用http服务的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于-> middleware(['api'])和-> middleware(['auth:api'])有什么区别?、browser-sync + http-proxy-middleware 配置代理跨域、browserSync+http-proxy-middleware配置跨域代理、Browsersync使用http-proxy-middleware转发请求到mock服务器的相关信息,请在本站寻找。
本文标签: