展现自己小技能

156 阅读9分钟

技能十六 了解生产环境下使用nginx来配置跨域代理

下载.png在生产环境下,使用Nginx配置跨域代理是一种常见的做法,可以解决前端应用在浏览器中发起跨域请求的问题。下面是一些基本步骤,来帮助你理解如何配置Nginx来实现跨域代理。

下载.png 安装Nginx:首先,你需要在服务器上安装Nginx。具体的安装步骤会因为操作系统的不同而有所差异。你可以参考Nginx官方文档或者相关教程来完成安装。

下载.png 配置Nginx代理: 打开Nginx的配置文件,通常位于 /etc/nginx/nginx.conf/etc/nginx/conf.d/default.conf。在 http 模块中添加以下配置:

http {
  ...
  server {
    listen 80;
    server_name your_domain.com;

    location /api {
      proxy_pass http://api.example.com;  # 将请求代理到指定的 API 服务器
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  }
  ...
}

下载.png 在上述示例中,我们配置了一个服务器块(server),监听端口80,并且将所有以 /api 开头的请求代理到 http://api.example.com

可以根据你的需求自定义代理路径(例如 /api)和目标服务器的地址(例如 http://api.example.com)。 还要确保将 server_name 更改为你自己的域名或服务器的IP地址。

下载.png 保存配置并重启Nginx: 保存对Nginx配置文件的更改,并重新启动Nginx服务,以使配置生效。可以使用以下命令来重启Nginx:

sudo service nginx restart

下载.png 这将重新加载配置并启动Nginx服务。

下载.png 验证代理是否生效: 确保你的前端应用中的API请求路径正确,指向Nginx服务器的地址和端口。例如,如果你的前端应用运行在 http://your_domain.com,并且需要请求 /api/users,确保前端代码中的API请求路径为 /api/users

当你在浏览器中访问前端应用并发起API请求时,Nginx将会代理该请求到指定的API服务器,并将响应返回给前端应用。

请注意,上述步骤仅为基本配置示例。根据你的具体需求和网络架构,可能需要进行更多的Nginx配置调整,例如添加SSL证书、负载均衡等。建议参考Nginx官方文档和其他资源,以获取更详细的配置指南和说明。

技能十七 能根据接口文档的要求发各种请求(增删改查) 并正确携带参数

前端可以根据接口文档的要求发送各种请求(包括增加、删除、修改和查询),并正确地携带参数。以下是一些常见的请求方法和参数携带方式的示例:

下载.png1 GET 请求(查询):

// 发送 GET 请求,携带查询参数
fetch('/api/users?name=John', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    // 可以在请求头中设置其他需要的参数
  },
})
.then(response => response.json())
.then(data => {
  // 处理返回的数据
})
.catch(error => {
  // 处理错误
});

下载.png2 POST 请求(创建):

// 发送 POST 请求,携带请求体参数
fetch('/api/users', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    // 可以在请求头中设置其他需要的参数
  },
  body: JSON.stringify({
    name: 'John',
    age: 25,
    // 其他需要的参数
  }),
})
.then(response => response.json())
.then(data => {
  // 处理返回的数据
})
.catch(error => {
  // 处理错误
});

下载.png3 PUT 请求(更新):

// 发送 PUT 请求,携带请求体参数
fetch('/api/users/123', {
  method: 'PUT',
  headers: {
    'Content-Type': 'application/json',
    // 可以在请求头中设置其他需要的参数
  },
  body: JSON.stringify({
    name: 'John',
    age: 30,
    // 其他需要的参数
  }),
})
.then(response => response.json())
.then(data => {
  // 处理返回的数据
})
.catch(error => {
  // 处理错误
});

下载.png4 DELETE 请求(删除)

// 发送 DELETE 请求
fetch('/api/users/123', {
  method: 'DELETE',
  headers: {
    'Content-Type': 'application/json',
    // 可以在请求头中设置其他需要的参数
  },
})
.then(response => {
  if (response.ok) {
    // 处理成功删除的逻辑
  } else {
    // 处理删除失败的逻辑
  }
})
.catch(error => {
  // 处理错误
});

下载.png以上示例使用了 Fetch API 发起请求,并使用 JSON 数据进行参数携带。你可以根据具体的接口文档和需求,调整请求方法、URL路径和参数携带方式。确保在请求头中设置适当的 Content-Type,并根据服务器要求传递正确的参数。

技能十八 配置第三方的存储桶(腾讯云) 来保存文件

下载.png要在前端配置第三方的存储桶(如腾讯云)来保存文件和代码,通常需要进行以下步骤:

下载.png1. 注册并创建存储桶: 首先,你需要注册并登录到腾讯云的控制台。在控制台中创建一个存储桶(Bucket),用于存储文件和代码。

下载.png2. 获取访问凭证: 为了访问存储桶,你需要获取访问凭证(如密钥对),通常是访问密钥(Access Key)和访问密钥ID(Secret Key)。这些凭证用于在前端应用中进行身份验证和授权。

下载.png3. 安装相关 SDK 或使用第三方库: 为了简化与腾讯云存储桶的交互,你可以使用相关的软件开发工具包(SDK)或第三方库。腾讯云提供了针对不同编程语言的 SDK,你可以根据你的前端开发语言选择适当的 SDK。

下载.png4. 配置 SDK: 在前端应用中,使用腾讯云的 SDK,通过提供的访问凭证进行配置。这通常涉及设置访问密钥和密钥ID,以及指定存储桶的名称和地域等信息。

下载.png4. 上传文件和代码: 使用配置好的 SDK,你可以在前端应用中编写代码来上传文件和代码到腾讯云存储桶。这通常涉及选择要上传的文件、指定存储桶的路径和设置其他相关参数。

下载.png5. 下载文件和代码: 同样,使用配置好的 SDK,你可以在前端应用中编写代码来从腾讯云存储桶中下载文件和代码。这通常涉及指定要下载的文件路径和目标保存位置等参数。

在进行上述步骤时,请务必遵循腾讯云或相关存储桶提供的安全最佳实践,并确保对访问凭证进行适当的保护,以防止滥用或未经授权的访问。另外,你还可以参考腾讯云的官方文档和示例代码,以获取更详细的配置和操作指南。

技能十九 清晰说出权限控制的思路(RBAC)

前端权限控制的思路通常基于角色-权限的访问控制模型(Role-Based Access Control,RBAC)。以下是一个清晰的前端权限控制思路:

下载.png1. 角色定义: 首先,需要定义不同角色和其对应的权限。角色是一组具有相似权限需求的用户集合。例如,可以定义管理员、普通用户、访客等角色。

下载.png2. 权限定义: 在每个角色中,需要定义相应的权限。权限是指用户在系统中可以进行的具体操作或访问的资源。例如,创建、编辑、删除等操作权限,以及各个页面或功能的访问权限。

下载.png3. 用户分配角色: 将每个用户分配到适当的角色中。用户可以拥有一个或多个角色,这取决于其在系统中的权限需求。通常,可以在用户管理界面或后台进行角色分配。

下载.png4. 前端路由控制: 使用前端框架或路由库,根据用户的角色和权限来控制前端页面的访问。在路由配置中,为每个页面或路由设置所需的角色和权限。

const routes = [
  { path: '/admin', component: AdminPage, requiredRoles: ['admin'] },
  { path: '/dashboard', component: DashboardPage, requiredRoles: ['admin', 'user'] },
  { path: '/profile', component: ProfilePage, requiredRoles: ['admin', 'user'] },
  // 其他页面和路由配置
];

// 在路由导航前进行权限验证
router.beforeEach((to, from, next) => {
  const requiredRoles = to.meta.requiredRoles;
  const userRoles = getUserRoles(); // 获取当前用户的角色

  if (requiredRoles.some(role => userRoles.includes(role))) {
    // 用户拥有所需的角色,允许访问该页面
    next();
  } else {
    // 用户没有所需的角色,重定向到无权限页面或其他处理逻辑
    next('/unauthorized');
  }
});

下载.png5 UI元素级权限控制: 在前端页面中,根据用户的角色和权限动态显示或隐藏特定的UI元素(按钮、菜单等)。这样可以确保用户只能看到和操作他们有权限的UI元素。

<button v-if="userHasPermission('create')">Create</button>
<button v-if="userHasPermission('edit')">Edit</button>
<button v-if="userHasPermission('delete')">Delete</button>

// 根据用户的权限判断是否显示UI元素
methods: {
  userHasPermission(permission) {
    return this.userPermissions.includes(permission);
  }
}

下载.png通过以上思路,可以实现前端的权限控制,确保用户只能访问其权限允许的页面和执行其权限允许的操作。需要注意的是,前端权限控制只是一种辅助措施,后端仍然需要进行相应的权限验证和控制,以确保系统的安全性。

技能二十 清晰说出页面级别的权限控制

前端页面级别的权限控制是指根据用户的权限,决定是否允许用户访问某个具体的页面。以下是一个清晰的前端页面级别权限控制的思路:

下载.png1. 定义页面和权限: 首先,需要定义系统中的各个页面或路由,并为每个页面分配相应的权限。权限可以是简单的标识符或字符串,用于表示用户对页面的访问权限。

下载.png2. 获取用户权限: 在用户登录或认证成功后,从后端获取用户的权限信息,并保存在前端的会话中(如浏览器的本地存储或内存中)。

下载.png3. 页面访问控制: 在前端路由配置中,为每个页面设置所需的权限。

const routes = [
  { path: '/dashboard', component: DashboardPage, requiredPermission: 'dashboardAccess' },
  { path: '/profile', component: ProfilePage, requiredPermission: 'profileAccess' },
  // 其他页面和路由配置
];

下载.png4 路由导航守卫: 在前端路由导航守卫中进行权限验证,确保用户只能访问其具备权限的页面。

router.beforeEach((to, from, next) => {
  const requiredPermission = to.meta.requiredPermission;
  const userPermissions = getUserPermissions(); // 从会话中获取用户的权限信息

  if (userPermissions.includes(requiredPermission)) {
    // 用户具备所需权限,允许访问该页面
    next();
  } else {
    // 用户没有所需权限,重定向到无权限页面或其他处理逻辑
    next('/unauthorized');
  }
});

下载.png通过以上步骤,可以实现前端页面级别的权限控制。在用户访问每个页面之前,会检查其所需的权限,并根据用户的权限决定是否允许访问该页面。需要注意的是,前端页面级别的权限控制只是一种辅助措施,后端仍需要进行相应的权限验证和控制,以确保系统的安全性。