经测试,当前实例下所有url请求都能被拦截器捕获到。
那就可以把url中的path通过转换,匹配到相应的云函数。
只要能异步加载云函数,那也算是变相的解决了这个问题了。
废话不多说,上代码。
export default {
data: 'hello world'
}
export default async function (ctx: FunctionContext) {
return { data: 'test path api' }
}
export async function main(ctx: FunctionContext) {
const funcName = ctx.request.path.replace(
/(^\/)|(\/)/g,
(match, p1, p2) => {
if (p1) {
return p1
} else {
return '_'
}
}
)
try {
const res = await require(`@${funcName}`)
if (res.default && typeof res.default === 'function') {
const instance = await res.default()
ctx.response.send(instance)
} else {
ctx.response.send(res.default)
}
} catch (err) {
ctx.response.send({
err: err.message,
path: ctx.request.path,
funcName,
query: ctx.query,
body: ctx.body
})
}
return false
}
最后,我们直接访问 xxx.laf.run/hello/world 或者xxx.laf.run/test/path 即可。
update:20230706
已发布到函数市场:https://laf.run/market/templates/649ccfd29622c81462953d70