Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

类似 dora-plugin-proxy 的 mock 方案,但不包含代理 #22

Closed
sorrycc opened this issue Dec 16, 2016 · 24 comments
Closed

类似 dora-plugin-proxy 的 mock 方案,但不包含代理 #22

sorrycc opened this issue Dec 16, 2016 · 24 comments
Milestone

Comments

@sorrycc
Copy link
Owner

sorrycc commented Dec 16, 2016

https://github.com/dora-js/dora-plugin-proxy#规则定义

@sorrycc
Copy link
Owner Author

sorrycc commented Dec 31, 2016

@sorrycc
Copy link
Owner Author

sorrycc commented Jan 2, 2017

记录下方案。

配置形式

.roadhogrc.server.js 里写。第一版仅支持配置式,函数式太灵活,要考虑的点太多了。

配置式

export default {
  'GET /local': './local.js',
};

函数式

export default function(router) {
  router.get('/local', (req, res) => res.send('hello dva'));
}

装载路由配置

配置式

读取 .roadhog.server.js,拿到列表,装载给 app

函数式

通过 express.Router 支持。

const router = express.Router();
router.get();
app.use('/api', router);

热更新

参考 express-remove-route ,检测到文件文件更新时,通过 app._router.stack 把上一次注册的 route 全部删除。

如何判断哪些文件做更新检测?这是 dora-plugin-proxy 所不智能的地方,可以通过在 require .roadhogrc.server.js 之前对 require 做 mockey patch,记录所有的 require,require 完之后取消 monkey patch 来获取。

@sorrycc
Copy link
Owner Author

sorrycc commented Jan 9, 2017

https://github.com/halt-hammerzeit/require-hacker,暂时用不上了。

@sorrycc
Copy link
Owner Author

sorrycc commented Jan 11, 2017

@FEliuyg
Copy link

FEliuyg commented Jan 11, 2017

本地新建.roadhogrc.mock.js,里面编写
export default {
'POST /api/results': {
data: [...],
page: {...},
success: true,
}
}
调用接口 /results时,访问不到怎么回事?

@sorrycc
Copy link
Owner Author

sorrycc commented Jan 11, 2017

@sorrycc
Copy link
Owner Author

sorrycc commented Jan 11, 2017

你定义了 /api/results,为何要访问 /results

@FEliuyg
Copy link

FEliuyg commented Jan 11, 2017

之前的mock方案是自动添加/api的,现在我两个接口 '/api/results'和‘/results’都尝试了,还是报404错误

@FEliuyg
Copy link

FEliuyg commented Jan 11, 2017

其他地方需要改动什么吗?比如引入文件,修改配置什么的?

@sorrycc
Copy link
Owner Author

sorrycc commented Jan 11, 2017

roadhog 是 0.5.0 版本?

@sorrycc
Copy link
Owner Author

sorrycc commented Jan 11, 2017

然后你访问的是 POST 接口?

@FEliuyg
Copy link

FEliuyg commented Jan 11, 2017

npm 安装最新的是0.4.3 版本0.5.0的下载npm install 不了

@sorrycc
Copy link
Owner Author

sorrycc commented Jan 11, 2017

抱歉,忘记 npm publish 了。。重新安装试试。

@FEliuyg
Copy link

FEliuyg commented Jan 11, 2017

OK,可以了,太棒了!又可以在没有后端的情况下好好玩耍了。

@gzbigegg
Copy link

gzbigegg commented Feb 5, 2017

这是我的配置文件:

export default {
'GET /employees' (req, res) {
employeeList(req, res);
},

'POST /employees' (req, res) {
	addEmployee(req, res);
}

}

看上去 GET 的时候 req.query 是没问题的,但 POST 的时候 req.body 就没有了,是不是还不支持 POST?

@sorrycc
Copy link
Owner Author

sorrycc commented Feb 5, 2017

body 漏加了,在 #86 跟进。

@henryzp
Copy link

henryzp commented Mar 23, 2017

mark

@jindada
Copy link

jindada commented Mar 28, 2017

@sorrycc @FEliuyg 用mock的时候 .roadhogrc中的proxy应该怎么配置啊

@sorrycc
Copy link
Owner Author

sorrycc commented Mar 28, 2017

不冲突,先走 .roadhogrc 的 proxy,再走 mock 的。

@FEliuyg
Copy link

FEliuyg commented Mar 29, 2017

@jindada proxy可以不用配置,值为null。本地增加一个.roadhogrc.mock.js, mock接口数据在里面配置就可以了

@zhanzl1
Copy link

zhanzl1 commented Apr 27, 2017

你是怎么配置的?我的也不起效果

@DrakeXiang
Copy link

如果在roadhogrc里面配置了proxy,怎么进行mock?

// roadhogrc
  "proxy": {
    "/api": {
      "target": "http://localhost:61814",
      "changeOrigin": true
    }
  },
// roadhog.mock.js
`    "/api/test": { success: true, result: [{test: 'yoo'}] }`

请求时出现504错误
POST http://localhost:8000/api/test 504 (Gateway Timeout)

在server命令行窗口看到错误信息:
[HPM] Error occurred while trying to proxy request /api/test from localhost:8000 to http://localhost:61814 (ECONNREFUSED) (https://nodejs.org/api/errors.html#errors_common_system_errors)

查了下这是由于服务器拒绝,那我想是不是防火墙的问题,然后试着设置了下端口规则,不知道有没有设置对,但还是一样的结果。所以。。。这到底是要怎么弄。。

@sorrycc
Copy link
Owner Author

sorrycc commented Jul 24, 2017

@DrakeXiang 都 proxy 到另一个服务器了,再配 mock 规则肯定无效了吧。

@DrakeXiang
Copy link

@sorrycc 额,我是小白,之前以为把61814这个端口打开就可以了,周末折腾了一下,最后还是把proxy去掉了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

7 participants