玩命加载中 . . .

ERROR 之部署服务器篇


  1. POST http://localhost:3000/login 404 (Not Found)?

有多种原因:①前端调用后端接口失败,通常是因为接口的路径匹配错误;②后端没有响应数据给前端;前端接收数据的格式与后端返回数据的格式不相符。

参考:vue项目 前端 POST(GET) http://127.0.0.1xxx 404(Not Found)错误 (多种误区解决)

  1. 在服务器运行npm run dev报错:SyntaxError: Cannot use import statement outside a module?

这提示一般是node下无法使用import。

解决方法参考这篇文章

  1. 在服务器上启动 NodeJs+ts 项目时报错之一:TS错误: 无法编译TypeScript(Error: TSError: ⨯ Unable to compile TypeScript)

解决:从 package.json 中删除 ts-node 和 typescript 。然后:

npm install ts-node --save-dev
npm install typescript -g 
npm install typescript --save-dev
  1. 在服务器上启动 NodeJs + Ts 项目时报错之二:Can't run my Node.js Typescript project TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /app/src/App.ts

情况说明:笔者启动项目的命令是 npm start ,项目 package.json 文件中 scripts 字段下 start 的代码为 node src/app.ts 。不幸的是,由于项目中既有 ES6 模块又有 CommonJS 模块,因此不能按照网上的教程只在 package.json 中添加 "type": "module 或者 只在 tsconfig.json 中添加 "type": "CommonJS" ,因为如果这样的话,项目运行后还是会报如下的错误:

import Koa from 'koa';
^^^^^^

SyntaxError: Cannot use import statement outside a module

解决方法:修改 package.jsonscripts 字段下 start 的代码为 node --experimental-modules --loader ts-node/esm { 项目入口文件 }

  1. 服务器用 pm2 启动项目失败:Error: Cannot find module '/Users/wyb/.nvm/versions/io.js/v3.0.0/lib/node_modules/pm2/lib/ProcessContainerFork.js'

情况说明:笔者的服务器确定是有安装了 pm2 的,使用 pm2 -v 也可以正常查询到版本号。然而此前 NodeJs 因为我误操作卸载重装了,虽然 pm2 也重新安装了一遍,但根目录下残留的文件路径指向的是以前的 pm2 ,因此只要将根目录下的 pm2 删除即可。

解决:rm -rf ~/.pm2

参考:overflow 回答

  1. 启动 pm2 报错:Process or Namespace ./src/app not found
[PM2][ERROR] Process or Namespace ./src/app.ts not found
[PM2][ERROR] Interpreter /www/server/nvm/versions/node/v14.17.6/lib/node_modules/pm2/node_modules/.bin/ts-node is NOT AVAILABLE in PATH. (type 'which /www/server/nvm/versions/node/v14.17.6/lib/node_modules/pm2/node_modules/.bin/ts-node' to double check.)

排查流程:正常下,可以先 pm2 -v 查看是否已经安装 pm2 ,如果不能显示版本信息,有两种情况,一种是没有安装,那么运行 npm install pm2 -g ;如果确定安装过了,则可以试试建立软链接:ln -s { 安装 pm2 的绝对路径 } /usr/local/bin/ 。如果还不能解决,就再往下看看。

先看第二个报错,情况①博主的服务器安装了宝塔面板,并在面板里安装了 pm2 管理器,导致与服务器的 pm2 冲突。于是把宝塔面板中的 pm2 管理器卸载,就没有这个报错了。②用 xshell 工具执行这条命令:pm2 start src/app.ts --interpreter ./node_modules/.bin/ts-node 即可。

  1. 将项目中的脚本上传至服务器并执行时报错:npm: command not found
deploy.sh: line 2: npm: command not found
/usr/bin/env: node: No such file or directory
/usr/bin/env: node: No such file or directory

根据网上的解决方法,正解本来应该是 用绝对路径设置软链 ,但博主的情况很特殊,是由于 /usr/bin/env 命令被修改,导致找不到 node ,这也是在我多方尝试无果之后向阿里提交工单,大佬给出的回复。
大佬的解决方法便是从版本相同的主机 copy 一份 /usr/bin/env 命令到我本机上,这才恢复正常。

注:在服务器上的操作大家一定要慎重,误删文件可能会导致各种很难解决的 bug ,这已经是我第二次遇到特殊情况了。

  1. 端口被占用?
  • 查看端口使用情况:netstat -ntlp
  • 杀掉进程:kill (对应端口的PID)

参考资料:【转】linux下杀死进程(kill)的N种方法

  1. 无法访问阿里云ip地址?

解决方法:linux服务器安装nginx及使用

排查1:阿里云服务器 nginx公网IP无法访问浏览器
排查2:linux服务器部署完成之后访问不到—–总结篇

注:ping ip成功只能说明主机可以到达,端口还是有可能不可到达的。端口不可到达可能是由于HTTP 服务器未启动或者监听在其他端口入8080上了;还有一个可能是防火墙没开放80端口的访问权限。

排查过程中遇到的问题:
curl: (7) Failed to connect to 120.79.193.126 port 80: Connection refused
Xshell 链接 Could not connect to ‘192.168.80.129’ (port 22): Connection failed
在Linux6中查看及设置开机自启信息是使用chkconfig命令,Linux7中此命令已经被替代。虽然Linux7中已经不再使用chkconfig命令来管理服务是否开机自启,但是此命令仍旧可用,但是输出信息提示我们使用chkconfig命令的输出只是呗SysV所管理的服务,不包括systemd管理的服务,所以如果想在CentOS7中查看systemd管理的服务需要使用以下命令:CentOS 7设置ssh服务自动启动

或许有用?


文章作者: hcyety
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hcyety !
评论