类似 dora-plugin-proxy 的 mock 方案,但不包含代理
sorrycc opened this issue · 24 comments
记录下方案。
配置形式
在 .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 来获取。
本地新建.roadhogrc.mock.js,里面编写
export default {
'POST /api/results': {
data: [...],
page: {...},
success: true,
}
}
调用接口 /results时,访问不到怎么回事?
你定义了 /api/results
,为何要访问 /results
?
之前的mock方案是自动添加/api的,现在我两个接口 '/api/results'和‘/results’都尝试了,还是报404错误
其他地方需要改动什么吗?比如引入文件,修改配置什么的?
roadhog 是 0.5.0 版本?
然后你访问的是 POST 接口?
npm 安装最新的是0.4.3 版本0.5.0的下载npm install 不了
抱歉,忘记 npm publish
了。。重新安装试试。
OK,可以了,太棒了!又可以在没有后端的情况下好好玩耍了。
这是我的配置文件:
export default {
'GET /employees' (req, res) {
employeeList(req, res);
},
'POST /employees' (req, res) {
addEmployee(req, res);
}
}
看上去 GET 的时候 req.query 是没问题的,但 POST 的时候 req.body 就没有了,是不是还不支持 POST?
mark
不冲突,先走 .roadhogrc 的 proxy,再走 mock 的。
你是怎么配置的?我的也不起效果
如果在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)
查了下这是由于服务器拒绝,那我想是不是防火墙的问题,然后试着设置了下端口规则,不知道有没有设置对,但还是一样的结果。所以。。。这到底是要怎么弄。。
@DrakeXiang 都 proxy 到另一个服务器了,再配 mock 规则肯定无效了吧。
@sorrycc 额,我是小白,之前以为把61814这个端口打开就可以了,周末折腾了一下,最后还是把proxy去掉了