eggjs如何封装请求方法
我想这样写,可以吗?
// app/extend/helper.js
module.exports = app => {
const ctx = app.createAnonymousContext();
return {
async post(url, body) {
await ctx.curl(url, {
method: 'POST',
data: body,
contentType: 'application/x-www-form-urlencoded',
dataType: 'json',
timeout: 4900,
timing: true,
headers: {
custom: '111',
},
})
}
}
}
正经应该怎么写?
6 回复
并不能,上面等价于 require 了这个文件,然后获取他的属性描述符,然后赋值给 this.app.Helper.prototype。 要使用 app 得使用 loadFile. loadToApp 或者 CustomLoader 这些, 不过这样就不是挂到 helper 上了
@yviscool 其实我也不知道挂哪合适,,您觉得最佳实践该怎么写呢?
Helper 本来就是 context 级的对象了,不需要 createAnonymousContext
(它会丢失上下文的用户信息)
module.exports = {
async myPost(url, body) {
return this.ctx.curl(url, { method: 'POST', data: body, ... });
}
}
一般这种我会写成一个 service 而不是 helper
@atian25 大神来啦,是这样,我每次在service发请求会带一些固定的参数,每个curl写下来有点长,,,所以想封装一个统一的post方法
我的意思是你加一个 XXService,其他 Service 都调用它,或者提供一个 BaseService 基类。
如果很常用的话,直接挂到 ctx 也未尝不可。
另外,有个 config.httpclient.request
可以用来设置全局的默认配置。
@atian25 菜比明白啦哈哈哈,感谢