jsonp(egg内置的中间件)
中间件配置
// config/config.default.js
exports.jsonp = {
callback: 'callback', // 识别 query 中的 `callback` 参数
limit: 100, // 函数名最长为 100 个字符
};
egg中自动拼接执行传递过来的回调函数。所以不需要拼接callback函数,传递参数。直接传递即可。
// 其他框架中
async index() {
const { ctx } = this
const callback = ctx.query.callback
const data = {
username: 'zh',
password: '123'
}
ctx.body = `${callback}(${data})`;
}
// egg中
async index() {
const { ctx } = this
const data = {
username: 'zh',
password: '123'
}
ctx.body = data;
}
设置访问白名单
// config.default.js
config.jsonp = {
callback: 'callback',
csrf: true,
// 设置白名单.不加端口号
whiteList: /http:// localhost//
}
vue3中使用jsonp
setup() {
// jsonp解决跨域
//动态创建script,加载数据
const oScript = document.createElement("script");
oScript.src = `http://localhost:7001/testjsonp?callback=getResultList`;
document.body.appendChild(oScript);
//动态创建script,执行回调脚本
const oScript1 = document.createElement("script");
oScript1.innerHTML = `
function getResultList(res) {
console.log("res", res)
}
`
document.body.appendChild(oScript1);
},