koa如何在监听一个端口后,检测这个端口是否被占用?
最近遇到了一个小问题,我要用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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用net包里面的createServer函数,在回调函数中处理,如果监听成功证明端口没被占用,然后关闭这个刚才新建的socket,监听你的HTTP服务
上代码
koa.listen(8800, () => console.log('监听8800端口中')).on('error',console.log)
koa.listen(8800, () => console.log('监听8800端口中'))
返回的是一个http类这个http类加上
.on('error',console.log)
捕获error事件的话,程序就不会退出,你可以在这里判断报错是否因为端口被占用。
提供一个思路, 用
Nodojs
执行系统命令去检测端口占用状态windows
linux
根据返回结果判定,如果返回大于 1 行,表示端口被占用了