在项目复杂的业务场景,有时候需要在前端跨域获取数据,这时候提供数据的服务就需要提供跨域请求的接口,通常是使用JSONP的方式提供跨域接口。
demo地址
https://github.com/ChenShenhai/koa2-note/blob/master/demo/jsonp/
// 判断是否为JSONP的请求if ( ctx.method === 'GET' && ctx.url.split('?')[0] === '/getData.jsonp') {// 获取jsonp的callbacklet callbackName = ctx.query.callback || 'callback'let returnData = {success: true,data: {text: 'this is a jsonp api',time: new Date().getTime(),}}// jsonp的script字符串let jsonpStr = `;${callbackName}(${JSON.stringify(returnData)})`// 用text/javascript,让请求支持跨域获取ctx.type = 'text/javascript'// 输出jsonp字符串ctx.body = jsonpStr}
const Koa = require('koa')const app = new Koa()app.use( async ( ctx ) => {// 如果jsonp 的请求为GETif ( ctx.method === 'GET' && ctx.url.split('?')[0] === '/getData.jsonp') {// 获取jsonp的callbacklet callbackName = ctx.query.callback || 'callback'let returnData = {success: true,data: {text: 'this is a jsonp api',time: new Date().getTime(),}}// jsonp的script字符串let jsonpStr = `;${callbackName}(${JSON.stringify(returnData)})`// 用text/javascript,让请求支持跨域获取ctx.type = 'text/javascript'// 输出jsonp字符串ctx.body = jsonpStr} else {ctx.body = 'hello jsonp'}})app.listen(3000, () => {console.log('[demo] jsonp is starting at port 3000')})