Yapi安装及配置指导
约 906 字大约 3 分钟
2024-09-19
服务调测
- chrome浏览器安装插件cross-request,安装方法参考https://juejin.cn/post/6844904057711099912
- Edge浏览器直接在插件市场搜索安装cross-request进行安装
内网部署
参考:https://hellosean1025.github.io/yapi/devops/index.html
异常解决:
- Error: getaddrinfo ENOTFOUND yapi.demo.qunar.com
参考质料:https://github.com/YMFE/yapi/issues/2180
以pnpm安装为例,找到yapi-cli 安装的位置:/root/.local/share/pnpm/global/5/node_modules/yapi-cli/src/commands/server.js
修改server.js内如下:
// 将以下代码全部注释
if(config.company){
try{
// 将下面这行注释掉 然后保存退出
// axios.post('http://yapi.demo.qunar.com/publicapi/statis', {company: config.company}).then(res=>{});
}catch(e){}
}
修改同目录下install.js文件,内容如下:
try{
await verifyConfig(config);
let yapiPath = path.resolve(root, 'vendors');
utils.log('开始下载平台文件压缩包...')
await wget(yapiPath, v, 'github'); // 将这行代码替换为: await wget(yapiPath, v, "github"); 即指定传入的type类型
utils.log('部署文件完成,正在安装依赖库...')
shell.cd(yapiPath);
await handleNpmInstall();
utils.log('依赖库安装完成,正在初始化数据库mongodb...')
await handleServerInstall();
utils.log(`部署成功,请切换到部署目录,输入: "node vendors/server/app.js" 指令启动服务器, 然后在浏览器打开 ${domain} 访问`);
}catch(e){
throw new Error(e.message)
}
// 淘宝进行地址已下线可以,修改为最新的地址:https://registry.npmmirror.com
// 若服务器已配置过npm源,可以删除。
function handleNpmInstall(){
return new Promise(function(resolve, reject){
// let child = shell.exec('pnpm install -q --production --registry https://registry.npm.taobao.org', {async: true, silent: true});
let child = shell.exec('pnpm install -q --production', {async: true, silent: true});
child.stdout.on('data', (data) => {
console.log(` ${data}`);
});
child.stderr.on('data', (data) => {
console.log(` ${data}`);
});
child.on('close', (code) => {
resolve(true);
});
})
}
2.node-sass报错如下,先卸载在安装pnpm uninstall node-sass,然后重新安装和node环境匹配的版本
gyp verb check python checking for Python executable "python2" in the PATH
gyp verb `which` failed Error: not found: python2
gyp verb `which` failed at getNotFoundError (F:\company_project\xiexin\trunk\app\xxsdapp\node_modules\which\which.js:13:12)
gyp verb `which` failed at F (F:\company_project\xiexin\trunk\app\xxsdapp\node_modules\which\which.js:68:19)
gyp verb `which` failed at E (F:\company_project\xiexin\trunk\app\xxsdapp\node_modules\which\which.js:80:29)
3.启动报错如下,安装extend模块,pnpm install extend
Error: Cannot find module 'extend'
Require stack:
- /var/lib/yapi/vendors/server/utils/mongoose-auto-increment.js
- /var/lib/yapi/vendors/server/models/base.js
- /var/lib/yapi/vendors/server/models/log.js
- /var/lib/yapi/vendors/server/utils/commons.js
- /var/lib/yapi/vendors/server/app.js
服务管理工具PM2
安装PM2工具
npm install pm2@latest -g
# 添加pm 服务
pm2 start -n yapi ./server/app.js
# 查看pm2 服务
pm2 list
# 停止服务
pm2 stop yapi
# 删除服务
pm2 delete yapi
root@iser:vendors# pm2 restart yapi
Use --update-env to update environment variables
[PM2] Applying action restartProcessId on app [yapi](ids: [ 1 ])
[PM2] [yapi](1) ✓
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name │ mode │ ↺ │ status │ cpu │ memory │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 1 │ yapi │ fork │ 1 │ online │ 0% │ 20.7mb │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘
自动鉴权
方案一:插件方式 yapi-plugin-interface-oauth2-token
yapi有自动鉴权插件,不过很难安装成功,参考资料
方案二:通过前置和后置脚本实现
打开 设置-> 请求配置 添加Pre-request Script 和 Pre-response Script 处理请求数据。参考示例:
Pre-request Script(请求参数处理脚本):
console.log("*****************************Pre-request*******************************")
console.log("context", context)
console.log("global", global)
var api_token = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKk1wsrn6mjD5v8CP5QunhxOx9Om7RXoZ5O3mE/MGKoqbt0M2bhWA3VyrhV2MwogOfEUvUWOgvgMxaylYvhaBE0CAwEAAQ=="
var {pathname, storage} = context
if(pathname=="/api/autoLogin" || pathname=="/api/login"){
requestHeader.Authorization=""
requestHeader['Api-Token']=""
console.log("yapi delete Authorization success!")
} else if(pathname.startsWith("/api/audit")){
requestHeader.Authorization=""
requestHeader['Api-Token']=api_token
console.log("yapi add audit token success!")
} else {
//拦截请求,添加token
requestHeader.Authorization=storage.getItem("AI-Authorization")
}
Pre-response Script(响应数据处理脚本)
注意:chrome下若api站点用的域名和rest服务域名不一致下面代码进行二次请求时报跨域问题。解决方案如下:
方案一:通过IP地址访问yapi进行服务调试
方案二:修改chrome隐私策略chrome://flags/#block-insecure-private-network-requests 将其disabled
console.log("*******************************Pre-response*****************************")
console.log(context)
var {href, pathname, responseData, storage, utils} = context
var login_url = href.replace(pathname, "/api/login")
var login_param = {username:'yapi',password:'111111'}
if(responseData.code == 401){
utils.axios.post(login_url, login_param).then(d =>{
// 登录成功刷新token
if(d.data && d.data.code === 200){
storage.setItem("AI-Authorization", d.data.token)
console.log("yapi refresh Authorization success!")
}
})
}