服务端相关问题


关于服务请求,服务端部署等相关相关问题记录

axios 相关

  • 请求头相关
    axios 使用 post 发送数据时,默认是直接把 json 放到请求体中提交到后端的。
    也就是说,我们的 Content-Type 变成了 application/json;charset=utf-8 (注意结尾不要带分号;),这是 axios 默认的请求头 content-type 类型。

post 请求常见的数据格式、请求头(content-type)
Content-Type: application/json: 请求体中的数据会以 json 字符串的形式发送到后端 如: {a:123}
Content-Type: application/x-www-form-urlencoded:请求体中的数据会以普通表单形式(键值对,k=v 写法)发送到后端 body 中:a=100
Content-Type: multipart/form-data: 它会将请求体的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。

客户端解决 Content-Type: multipart/form-data 的数据类型传参 ?

// 方式  formData
/* FormData对象的使用:
  用一些键值对来模拟一系列表单控件:即把form中所有的元素的name与value组成一个queryString。
  异步上传二进制文件。
  对于这种类型的数据,我们常见前端页面上传个人图像,然后点击保存发送后端修改原始数据 如下:
*/
let params = new FormData();
// const name = params.get("userName") // 还可以获取
params.append("file", this.file);
params.append("id", localStorage.getItem("userID"));
params.append("userName", this.name);
params.append("sex", this.sex);
params.append("email", this.email);
params.append("qq", this.qq);
axios
  .post(URL, params, { headers: { "Content-Type": "multipart/form-data" } })
  .then((res) => {
    if (res.data.code === 0) {
      this.$router.go(-1);
    }
  })
  .catch((error) => {
    alert("更新用户数据失败" + error);
  });

客户端解决 application/x-www-form-urlencoded 形式的传参?

// 方式1:  URLSearchParams
// 需要注意的是: URLSearchParams 不支持所有的浏览器,但是总体的支持情况还是 OK 的,所以优先推荐这种简单直接的解决方案
let param = new URLSearchParams();
param.append("username", "admin");
param.append("pwd", "admin");
axios({
  method: "post",
  url: "/api/lockServer/search",
  data: param,
});

// 方式2:qs 转换数据为key=value格式
// 引入 qs ,这个库是 axios 里面包含的,不需要再下载。
import Qs from "qs";
let data = {
  username: "cc",
  psd: "123456",
};
axios({
  headers: {
    "Content-Type": "application/x-www-form-urlencoded",
  },
  method: "post",
  url: "/api/lockServer/search",
  data: Qs.stringify(data),
});

部署服务器后遇到的问题记录

  • 客户端代码部署服务器后代理访问接口未授权?
    客户端代码请求了第三方服务接口,接口请求头添加了自定义请求头类似 __s__ __token__ _token_,浏览器里可以看到这些请求头,但是接口是服务端 nginx 代理,nginx 默认会过滤掉请求头包含 _ 、 - 的字段,导致这些参数消失请求失败。

node 服务部署服务器遇到问题

  • 添加 5000 端口外网访问不到?
    宝塔面板启动后,默认 linux 服务器防火墙开启了,需手动关闭防火墙

my 服务器配置
1vCPUs | 2GB
CentOS 8.2 64bit
命令:
查看防火状态
systemctl status firewalld
暂时关闭防火墙
systemctl stop firewalld
永久关闭防火墙
systemctl disable firewalld
重启防火墙
systemctl enable firewalld

查看 5000 端口是否被监听
ss -nutlp | grep 5000

curl 使用
查看某地址是否可访问

curl http://123.60.111.103:5000
curl http://localhost:5000

  • node 服务启动文件监听 ip?
    node 服务启动文件 监听 ip 一定要写成 0.0.0.0 或者可以省略不写;由于我写成了 127.0.0.0导致部署服务器后访问失败!
  • 一般外网无法访问服务器指定端口排查如下
    排查服务商对应端口安全组是否开放?
    排查服务器对应端口是否放行
    排查服务器防火墙是否关闭
  • 服务器使用 pm2
    服务器使用 pm2 启动 node 服务失败
    在云服务器上使用 pm2 管理 node 服务器进程,启动时失败。mysql 连接 host 为 localhost 时可以,换成服务器公网 ip 就不行了。排查后发现是因为服务器数据库权限没添加对应 ip!!
  • mysql 数据库自动关闭
    解决 nodejs的Connection lost: The server closed the connection
    原因:mysql 自带一段时间无动作会自动关闭的机制
    node 服务部署服务器后默认 8 小时不操作数据库会自动关闭,解决方法:使用连接池

文章作者: 尖椒土豆sss
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 尖椒土豆sss !
 上一篇
h5接入浙里办爬坑 h5接入浙里办爬坑
记录个人遇到的 h5应用接入’浙里办’ 的爬坑之路!如果文章对你有帮助,可以点击链接关注我的掘金社区账号 更多技术分享请移步我的掘金哦~ 😀😀😀 点击链接 学习交流群(前端微信群) - 掘金 (juejin.cn) 加vx拉你进 前端
下一篇 
js常用方法 js常用方法
记录 js 常用方法js 类型判断 Object.prototype.toString // 以下是11种: var number = 1; // [object Number] var string = "123"; // [objec
2021-04-01 尖椒土豆sss
  目录
L
O
A
D
I
N
G