koa如何在监听一个端口后,检测这个端口是否被占用?

发布于 2022-09-11 16:16:06 字数 1863 浏览 12 评论 0

最近遇到了一个小问题,我要用koa做一个简单的静态文件服务器。在app.listen(5050)监听一个端口后,我想确认这个的占用状态,因为在程序运行过程中可能会多次调用app.listen()语句,如果没法确认端口是否被占用,则可能导致程序出错。

import Koa from 'koa'
import Path from 'path'
import StaticServer from 'koa-static'
import BodyParser from 'koa-bodyparser'
import Router from 'koa-router'
import Cors from 'koa2-cors' // during development allow cors
import Database from '../database/index'

const app = new Koa()
let serverRouter = new Router()
let server
let data
let dataFile
app.use(Cors())

// 静态文件服务
const staticPath = './static'
app.use(StaticServer(Path.join(__dirname, staticPath)))

app.use(BodyParser())

// 路由
let submit = async function (ctx) {
  console.log(ctx.request.body)
  ctx.response.body = {
    'success': true,
    'message': '添加数据成功'
  }
  let data = {
    content: ctx.request.body
  }
  Database.insert(dataFile, data)
}
let stadata = async function (ctx) {
  console.log(data)
  ctx.response.body = data
}
let findsta = async function (ctx) {
  let ctxparams = ctx.params
  console.log('sever get request')
  console.log(ctxparams.staname)
  await Database.findStaByName(ctxparams.staname).then((staContent) => {
    console.log(staContent)
    ctx.response.body = staContent
  })
}
serverRouter
  .post('/api/submit', submit)
  .get('/api/stadata', stadata)
  .get('/api/findsta/:staname', findsta)
app.use(serverRouter.routes()).use(serverRouter.allowedMethods())

let startServer = function (arg1) {
  server = app.listen(5050)
  data = arg1
  console.log('Your server is starting at port 5050')
}

let stopServer = function () {
  server.close()
  console.log('Your server is closed')
}

export default {
  startServer,
  stopServer
}

主要的问题就在于如何更改startServer函数,使得可以在调用app.listen语句以前确认一下端口或者服务的状态。

同时请问大家有知道koa详细的api文档可以哪里找吗?这个问题就是因为自己在网上百度了很久,感觉都是介绍koa如何使用,而没有思路。

非常感谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

才能让你更想念 2022-09-18 16:16:08

使用net包里面的createServer函数,在回调函数中处理,如果监听成功证明端口没被占用,然后关闭这个刚才新建的socket,监听你的HTTP服务

×眷恋的温暖 2022-09-18 16:16:08

上代码 koa.listen(8800, () => console.log('监听8800端口中')).on('error',console.log)

koa.listen(8800, () => console.log('监听8800端口中')) 返回的是一个http类

这个http类加上 .on('error',console.log) 捕获error事件的话,程序就不会退出,

你可以在这里判断报错是否因为端口被占用。

北恋 2022-09-18 16:16:06

提供一个思路, 用 Nodojs 执行系统命令去检测端口占用状态

windows

netstat -aon | findstr "5050"

linux

netstat -ntlp | grep 5050

根据返回结果判定,如果返回大于 1 行,表示端口被占用了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文