oner-team / oner-io Goto Github PK
View Code? Open in Web Editor NEW多人协作时定义接口和使用接口的一套规范
License: MIT License
多人协作时定义接口和使用接口的一套规范
License: MIT License
在GET请求发送到后端解析的时候,没问题。 切换到POST 模式传到后台解析是乱码,如果把请求头中下面两个配置进行默认值增强,注意要同时增强,即可以解决。
"Content-Type": 'application/x-www-form-urlencoded; charset=UTF-8'
"Accept":'application/json, text/json'
eg
getA().then((res)=>{
// 这里 res 是content 的内容, 经过我 fit 函数处理的
}).catch((res)=>{
// 这里的 res 是整个mtop 响应的内容,没有经过fit 处理,因此 res 就是类似
})
插件示意代码
let request = function () {
this.config.fit = (res) => {
const fitRes = {};
if (res.ret[0].indexOf('SUCCESS::') !== -1) {
fitRes.success = true;
fitRes.content = res.data;
return fitRes;
}
fitRes.error = {
message: res.ret,
ret: res.ret
};
fitRes.content = res.data;
fitRes.success = false;
return fitRes;
};
this.config.customRequest = function (vars, config, process) {
//noinspection JSUnresolvedFunction,JSUnresolvedVariable
MTOPOpen.request(vars.data).then((resJson) => {
//noinspection JSUnresolvedFunction
process(true, resJson);
}).catch((error) => {
//noinspection JSUnresolvedFunction
process(false, error);
});
};
};
在 ie8/9 下,默认使用 XDomainRequest ,而XDomainRequest使用时,server 端必须要设置Access-Control-Allow-origin, 否则会报错:SEC7120
全局配置可否有失败的回调?
设置了timeout ,并发请求会cancled掉前面的一个请求~ 大bug!!! 速度解决……
现在项目中需要判断请求的状态码,但遍查文档未发现如何在didFetch这一方法中获得xhr对象,希望您能解答
middleware
机制。cachePlugin
(支持 sessionStorage
、 localStorage
、内存
等缓存方式「服务端甚至可以直接用 tair
」)。cache
可以采用 sha1
来做 key
。key
的唯一性需要考虑。组件级对依赖的要求就是尽量轻,而通常组件中发起请求只会有一到两个,所以不需要复杂的环境配置。如果能够有更轻更简便的用法,相信可以得到更好的推广。
如题目描述,插件内部使用 customRequest 控制请求,reject 请求在全局无法检测到
从语义还有使用上来说context.create执行后返回结果(return ctx.api;)更合适,
let context = nattyFetch.context();
let apis= context.create(......);
export default apis;
我们是通过返回的http code来判断 请求是成功还是失败的,所以要拿http code 决定success 还是error,但是看了下,回调函数中好像没有方法获取http code
我对urlMark 设置 false 或者 true 都会在url后面增加上_api=*** 这个参数变量 . 是否有哪里设置的不正确导致 , 求指导
var isArray = function (v) {
return toString.call(v) === ARRAY_TYPE
};
在这里你调用了 window.toString(),在 IE9 和 IE10 中是无法正常运行的
当前,nowa框架已经很好的支持了前端的开发, 前后端分离的. 都在用restful API规范的接口.
natty-fetch,怎么能不支持呢?
现在,经过钉钉的推荐,已经发行natty是非常好的工具了,但是resful的不支持,确实是一个很大的遗憾.
尤其是作为标榜一个数据api接口的优秀工具.
希望可以提供配置项禁用自动追加内部参数
如果在context.create({}),这里的选项,没有办法进行后继的一些处理,比如基于某些原因,项目中途使用此组件或者基于标准写法定义选项,后续是没有办法进行转换的。
dataContext.create({
getInitData: {
method: "GET",
url: "invoice/getInitData",
cache: "default"
})
比如 cache: "default" 是按fetch标准写法,要转换成你的storage,是无法实现的。
我加了一个事件,可以处理了,还有根据method == "POST"就可以全局作一些处理,这都是很常见的作法,
context.on("processOptions", function (config) {
if (config.method == "POST") {
config.header = Object.assign({}, config.header, { "Content-Type": "text/json" });
}
if (config.cache === "default") {
config.storage = { type: 'localStorage', key: config.url, tag: 'v1.0' };
}
});
还有一个问题,目前导致我不能继续使用这个组件了,
在sendAjax 中POST方法下处理主体数据,你在内部序列化时进行了 params 化,但是并不是所有数据都是这种处理方法,外部无法进行处理。比如,我项目的提交数据格式必须是json。像zepto,jquery都有这方法的机制,用processData标记是否需要内部进行处理。
netty对ajax方法进行了封装,无法通过ajax头来直接传递一个类的JSON数据,要怎么处理?
使用ajax,我们是这么处理的
$.ajax({
type: 'POST',
url: "/Api/XX",
contentType: 'application/json; charset=utf-8',//将json数据以request payload的形式发起请求
data: JSON.stringify(data),
success: function (response) {
}
catch (ex) {
}
}
});
使用natty的方式,已经设置了header,
header: {
'Accept': '_/_',
'Content-Type': 'application/json; charset=utf-8',//将json数据以request payload的形式发起请求
}
但是针将JSON.stringfy(data)后的数据变成一长串,查代码发现是 var vars = t.makeVars(data)会修改它。
被转换后的数据如下:
0=%5B&1=%22&2=c&3=h&4=a&5=t&6=5&7=4&8=4&9=7&10=3&11=8&12=0&13=2&14=d&15=f&16=1&17=6&18=8&19=1&20=d&21=2&22=6&23=d&24=3&25=5&26=2&27=0&28=6&29=3&30=f&31=d&32=a&33=6&34=a&35=4&36=e&37=3&38=%22&39=%2C&40=%22&41=A&42=%22&43=%2C&44=%22&45=B&46=%22&47=%2C&48=%22&49=C&50=%22&51=%5D
这个数据明显是不对的。
natty要怎么设置才能实现,传输到后端可以被FromBody接收?
在搜人控件等场景下,用户输入会比较快,希望可以做下控制。
大概实现逻辑是:
在发请求之前,如果发现之前 XHR
存在,就调用下 abort
。
JSON.stringify后:
{"user2Id":1000001,"salesTypeId":1000008,"cEquotsetId":1000000,"bpartner":"张三","phone":"13562591755","equipClassId":1000005,"equipModelId":1000013,"salesAmt":1000000,"downpaymentRate":0,"downpayment":0,"divideAmt":0,"divideNumber":0,"loanAmt":0,"loanNumber":0,"packDivideAmt":0,"packDivideNumber":0,"createdby":1000117}
POST提交,Request Payload如下:
后台:@requestbody没办法解析
应该由使用者决定是否启用跨域自定义头,而不是强制屏蔽。
nattyfetch 里面,生成 jsonp 接口的函数,后面跟从1开始自增 ID,这样多实例并发请求下,有一定几率会产生全局jsonp callback 重复
建议使用随机数的方式来生成全局函数,这样更加准确。
比如
function makeid() {
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for (var i = 0; i < 15; i++)
text += possible.charAt(Math.floor(Math.random() * possible.length));
return text;
}
console.log(makeid()+"_"+ +new Date());
withCredentials属性自动判断url是否跨域逻辑写反了
xhr.withCredentials = isBoolean$1(options.withCredentials) ? options.withCredentials : isCD;
应该是
xhr.withCredentials = isBoolean$1(options.withCredentials) ? options.withCredentials : !isCD;
XMLHttpRequest.open(method, url, async, user, password)
检测 web storage 是否支持的代码,没有 try catch 异常。造成 natty-fetch 执行异常。
https://github.com/jias/natty-storage/blob/master/src/natty-storage.js#L36
场景是,正式环境请求本地的api。测试时请求第三方站点的mock api。
POST时,框架内置Content-Type:application/x-www-form-urlencoded;
没办法重设,是否可以去掉此限制。
SyntaxError: Unexpected token :
希望提供一个cross origin 配置选项,这样内部如果发生 JS 方面异常,也可以在全局捕获到
natty-db现在还能用不
RSVP error捕获范围太大,导致 then 成功后 的代码报错也被捕获,不利于排错
可以在fit取得response之前先做一层JSON5的解析,这个需求只在本地, 可以只在mock为true时开启。
now need require natty-fetch/dist/natty-fetch.pc
快速请求两次,有一个请求根本不会到达后台,为什么呢~参数是不一样的啊,只能先换库了
由于需要上传图片视频的文件,所以需要用到content-type:multipart/form-data,但是没有找到如何设置,老板能指点一下吗。用'RAW'的方式手动在header里面配置会缺少boundary=----WebKitFormBoundaryAnxxxxxx这一段,然后也不能请求成功~好像是浏览器bug还是什么,Fetch库也存在这个问题,可以通过不设置content-type字段解决。
User can use the specified Promise Library instead of using global Promise
@jias willFetch 暴露 this.abort()
success为false的情况下对promise进行catch,大部分情况下服务端返回response.error都是空的,应该直接返回response方便判断其中的errorCode(或者其它字段)
代码地址 https://github.com/jias/natty-fetch/blob/master/src/natty-fetch.js#L455
我有一种使用场景是这样的:
一开始,使用的非mock数据,
nattyFetch.setGlobal({
mock: false
})
接下来用户想查看demo,我们必须使用mock数据了,测试尝试
nattyFetch.setGlobal({
mock: true
})
然后不起作用,调用api请求数据仍然是实用的非mock数据
所以,是否能够存在一种机制能够,批量修改所有已经创建的context的mock属性
服务端抛出的400,500错误有好的解决方案吗
我发现我想对sendAjax的error作全局处理时居然没有办法去捕获处理它。成功响应中有对逻辑错误作事件触发,这种错误也应该有捕获点。
对于请求错误,例如 401 Unauthorized
,此时需求上应该在全局跳转到鉴权页面处理。
Natty-Fetch
有相关实现吗?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.