NodeJs端
1. 源码保护
> 项目源码涉及node端后台代码,和前端代码,源码保护措施如下:
> 1: node:代码混淆+加密+压缩
> 2: 客户端:提供给客户的是已编译的代码
> 3: node端和处于已编译状态的客户端公用一个配置文件;难点在于客户端是编译过的代码,配置文件更新的时候客户端是识别不到的,所以采用动态加载的方式,下面有具体步骤。
因为客户端和node服务端都涉及到配置,而且客户端代码编译完成后要发送给客户,所以客户如果根据自己的业务场景修改配置时,已编译的客户端代码使不能识别到最新的配置文件;node端因为是提供源码的,所以是可以获取到最新的配置。介于这种情况解决半发如下:
在整个项目的根目录定义一个全局配置文件config.json。
{
"production":{
"HOST": "https://nfs-src.sf8cloud.com"
},
"test":{
"HOST": "https://test-nfs.sf8cloud.com"
},
"development":{
"HOST": "https://dev-nfs.sf8cloud.com"
}
}
node端直接require引入,根据process启动环境选择配置文件中不同环境下的host地址;
重点在客户端,处于已编译的客户端是如何获取配置文件的更新的?
如下代码,其实就是通过请求动态获取,当然/envInfo
这个请求是在Node端添加了一个EnvController.js(代码如下),在EnvController.js中操作的还是更目录下的那个全局配置文件,然后根据node端启动环境不同向客户端发送对应环境的配置数据。
axios.get('/envInfo').then(res => {
console.log('======serverConfig===',res)
Vue.prototype.ydHostConfig = res.data
// localStorage.setItem('ydHostConfig', JSON.stringify(res.data))
}).catch(err => {
console.log('======err',err)
})
/**EnvController.js**/
const configInfo = require('../../serverConfig.json')
module.exports = {
/**
* 获取服务端的环境信息,使前端环境与之匹配
*/
getEnvInfo(req, res){
configInfo.env = process.env.NODE_ENV
if (process.env.NODE_ENV === 'production') {
return res.ok(configInfo.production)
} else if(process.env.NODE_ENV==='test'){
return res.ok(configInfo.test)
}else {
return res.ok(configInfo.development)
}
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。