无聊想要做一个Minecraft服务器的官网,然后想要实时获取服务器的状态信息
Minecraft是有自己的一套握手协议的,最开始我使用java写了个工具类来直接获取
后来烦老板给我发了个Node.js版本的minecraft-status
然后就想到了使用Vercel来托管这个api

简单使用

  • 初始化一个项目 npm init
  • 创建一个文件夹用作api的根目录,我这里就直接新建为 api 文件夹
  • 在该文件夹下创建 index.js ,这样之后可以使用xxx.vercel.app/api直接访问到
    如果是其他名字就需要访问xxx.vercel.app/api/文件名
  • index.js 文件内容的一个简单演示,标准的 HTTP Handler 的语法:
    1
    2
    3
    4
    module.exports = (req, res) => {
    const { name = 'World' } = req.query
    res.send(`<h1>Hello ${name}!</h1>`)
    }
    如果想返回json格式,可以使用res.json()
    1
    2
    3
    4
    5
    6
    7
    const { name = 'World' } = req.query
    let obj = {
    message:"Hello "+name+"!"
    }
    module.exports = (req, res) => {
    res.json(obj)
    }
  • 配置 Rewrites/Redirects 将api文件夹作为根目录:
    在项目根目录创建一个 vercel.json 配置如下
    1
    2
    3
    4
    5
    6
    7
    8
    {
    "rewrites": [
    {
    "source": "/",
    "destination": "/api"
    }
    ]
    }
  • 将项目丢到github上
  • 进入vercel官网,使用github账号登录,导入这个项目
  • 托管之后会分配一个域名,直接访问即可
Vercel Runtimes API

实现获取我的世界服务器状态

  • npm i minecraft-status
  • api/index.js 内容,setHeader允许跨域请求~
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    const { MinecraftServerListPing } = require("minecraft-status");

    module.exports = (req, res) => {
    res.setHeader('Access-Control-Allow-Credentials', true)
    res.setHeader('Access-Control-Allow-Origin', '*')
    res.setHeader('Access-Control-Allow-Methods', 'GET,OPTIONS,PATCH,DELETE,POST,PUT')
    res.setHeader(
    'Access-Control-Allow-Headers',
    'X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version'
    )
    const {
    protocol = 4,
    host,
    port = 25565
    } = req.query
    MinecraftServerListPing.ping(protocol, host, port, 3000).then(status => {
    res.json(status)
    }).catch(error => {
    res.json(error)
    })
    }
  • 丢到github,vercel会自动更新,然后直接访问 xxx.vercel.app?host=服务器地址&port=端口号 即可