如何给Egg.js项目开启80端口访问

为什么要

因某些特殊情况,项目cdn做了防盗链,然后本地开发也收到了限制,在cdn设置了一些本地ip的白名单,居然对端口支持不好,结果有时候可以访问cdn资源,有时候又不行,无奈,和运维、后端商量讲开发地址暂时改成80端口,以便正常开发~

Egg.js的项目改端口很简单啦。但是也有一些要注意的,本文面向MacOS,当然Linux系统应该同样适用。

如何做

这里有几个方案,供君参考:

修改package.json

跑哪个命令就在这个命令后面加--port=80,例如:

"start": "egg-scripts start --daemon --title=egg-server-51la-web-egg --workers=2 --port=80",
...

dev同理。

配置config.default.js

部分配置如下:

'use strict';
module.exports = app => {
  const exports = {};
  exports.cluster = {
    listen: {
      port: 80,
      hostname: '127.0.0.1',
    },
  };
  return exports;
};

以上方法都适用于执行egg-scripts时有效(例如npm start)。如果需要执行npm run dev,开启,请参考上文修改package.json的方案。

我最初通过设置config.local.js来实现,发现竟然不成功,报错!报错信息部分如下:

[egg-scripts] 2019-03-20 14:30:48,033 ERROR 7988 [app_worker] server got error: bind EADDRINUSE null:7001, code: EADDRINUSE

Nginx大法

比较麻烦,不过看了下官方文档,应该也是可以很好的支持的。有兴趣请阅读该节:

Warning

如果你不看这部分,很遗憾,你肯定跑不起来。你可能会遇到下面这些异常情况:

ERROR 3810 nodejs.AppWorkerDiedError: [master] app_worker#1:3813 died (code: 0, signal: null, suicide: false, state: dead), current workers: []

原因是Node.js的服务器端默认是无法使用1024以下的端口的。咋办呢?使用sudo哈哈哈。就是这样:sudo npm start或者sudo npm run dev

也有可能是:

ERROR 3709 [app_worker] server got error: bind EADDRINUSE null:80, code: EADDRINUSE

端口被占用了!node.js的server服务无法在ctrl+c后立刻终止。比如默认7001未能正常关闭,通过`config.local.js
文件修改的80端口也没有能够生效,每次启动服务都是启动了新的端口7002,此时:需要查出占用7001的端口的pid`,将它终止。操作效果大致如下:

P750TM:51la-web-egg whidy$ lsof -i:7001
COMMAND  PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node    2982 whidy   25u  IPv6 0x2f7a1da313a05e4d      0t0  TCP *:afs3-callback (LISTEN)
P750TM:51la-web-egg whidy$ kill
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
P750TM:51la-web-egg whidy$ kill 2982
P750TM:51la-web-egg whidy$ lsof -i:7001

上面用到两个命令:lsof -i:[端口号]kill [进程的PID],最后重新查询7001就没有任何返回,说明Ok了,再次执行sudo npm run dev,那么就很好的使用80端口了。

参考

本文仅作为总结形式,未能重新完整的实践整个流程,如果有操作跳跃性或错误欢迎提出~


我的笔记
个人学习笔记

喜欢玩游戏听歌写东西 ฅʕ•̫͡•ʔฅ

978 声望
74 粉丝
0 条评论
推荐阅读
PostCSS学习指南终结篇
2021年12月07日:注意这是一篇发布于2018年的老文章,因网友提到上篇文章有个链接失效的问题,故将当时写的文章迁移过来(文章之前存于上家公司的FE内部提交,离职已久,正好借机迁移,避免丢失,也算是终结这几...

whidy1阅读 1.3k

反编译微信小程序获取小程序前端源码wxapkg
研究反编译的原因就是我自己辛苦了半个月写的小程序,忘记备份放在桌面,心急体验Win11系统 重装系统忘记备份源码,后悔莫及。 后来网上找了反编译的教程,反编译已经上线了的小程序 于是自己尝试了一下,真的可...

TANKING12阅读 10k评论 7

封面图
PDF 预览和下载你是怎么实现的?
在开发过程中要求对 PDF 类型的发票提供 预览 和 下载 功能,PDF 类型文件的来源又包括 H5 移动端 和 PC 端,而针对这两个不同端的处理会有些许不同,下文会有所提及。

熊的猫7阅读 3.7k评论 1

封面图
Just for fun——C#应用和Nodejs通讯
进程通信常见的进程通讯的方法有:管道(Pipe)命名管道信号消息队列其他管道是比较简单基础的技术了,所以看看它。Node IPC支持Node官方文档中Net模块写着:IPC SupportThe net module supports IPC with named ...

pigLoveRabbit3阅读 6.8k评论 2

「过程详解」async await综合题
如果你之前跟我一样一直对async await熟悉又陌生的话(熟悉是可能每天都在用,陌生是针对一些组合题又丈二和尚摸不着头脑),不妨可以边看边练,总结规律,相信会逐渐清晰并有所得。本文对每个案例都详细描述了代...

wuwhs5阅读 1.2k

封面图
cligetter|一款快速生成 Cli工具 开发模版的脚手架
近年来 cli工具 的开发,对于不断发展的前端生态来说,似乎也逐渐成为工程师们的必备技能。其实开发一个 cli工具 并不难,但对于前端的同学可能存在一点认知上的小门槛,特别是对于刚开始接触 cli 脚手架工具开发...

木木剑光3阅读 640

一个灵活的 Node.js 多功能爬虫库 —— x-crawl
x-crawl · x-crawl 是一个灵活的 Node.js 多功能爬虫库。灵活的使用方式和众多的功能可以帮助您快速、安全、稳定地爬取页面、接口以及文件。如果你也喜欢 x-crawl ,可以给 x-crawl 存储库 点个 star 支持一下,...

coderhxl2阅读 1.9k评论 2

封面图

喜欢玩游戏听歌写东西 ฅʕ•̫͡•ʔฅ

978 声望
74 粉丝
宣传栏