POST http://localhost:3000/login 404 (Not Found)
?
有多种原因:①前端调用后端接口失败,通常是因为接口的路径匹配错误;②后端没有响应数据给前端;前端接收数据的格式与后端返回数据的格式不相符。
参考:vue项目 前端 POST(GET) http://127.0.0.1xxx 404(Not Found)错误 (多种误区解决)
- 在服务器运行
npm run dev
报错:SyntaxError: Cannot use import statement outside a module
?
这提示一般是node下无法使用import。
- 在服务器上启动 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
- 在服务器上启动 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.json
中 scripts
字段下 start
的代码为 node --experimental-modules --loader ts-node/esm { 项目入口文件 }
- 服务器用 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 回答
- 启动 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
即可。
- 将项目中的脚本上传至服务器并执行时报错:
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 ,这已经是我第二次遇到特殊情况了。
- 端口被占用?
- 查看端口使用情况:
netstat -ntlp
- 杀掉进程:
kill (对应端口的PID)
- 无法访问阿里云ip地址?
解决方法:linux服务器安装nginx及使用
注: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服务自动启动