代码之家  ›  专栏  ›  技术社区  ›  Slava

如何在GitHub页面上托管NodeJS API服务?复制

  •  -3
  • Slava  · 技术社区  · 1 年前

    我错过了一些关于Node.js服务是如何托管在GitHub页面上的理解。

    例如,我有一个JavaScript/HTML项目正在部署到GitHub并自动发布到GitHubPages,因此我可以导航到 https://myusername.github.io/ 并查看我的网络应用程序的运行情况。

    现在,直到现在,我还没有使用任何API。

    我想添加我自己用Node.js编写的API,这是一个使用Node.js表达库的简单JavaScript文件。

    因此,我创建了一个server.js文件,并将其放在应用程序的根目录中:

    import express from 'express';
    import fetch from 'node-fetch';
    import cors from 'cors';
    import convert from 'xml-js'
    
    const app = express();
    
    app.use(cors())
    
    app.get('/', async (req, res) => {
      const response = await fetch('https://news.knopka.ca/rss');
      const data = await response.text();
      const json = convert.xml2json(data);
      res.json(json);
    })
    
    app.listen(3000, () => {
      console.log('listening on port 3000');
    })
    

    当我将更改(包括此文件)推送到GitHub时,我希望能够导航到 https://myusername.github.io:3000/ 并查看它通过从上述RSS提要中获取数据并转换为JSON格式而生成的JSON结果。

    GitHub Pages自动将我的网站从存储库发布到 https://myusername.github.io/

    但是我如何运行在server.js中编码的API呢?

    现在,如果我导航到 https://myusername.github.io:3000/ 页面正在无限期加载。

    最后,我想从我的页面调用那个API并显示结果。

    所以,问题是:server.js是如何执行的,是什么执行的?

    我是否需要指导GitHub Pages如何运行它,或者有一个内置的运行程序?

    我不确定。所以我尝试的就是这个。

    我使用GitHub Actions创建了一个工作流,在我的应用程序项目中创建了一个子文件夹 .github\workflows 使用这个publish.yml文件

    name: Node.js Package
    
    on:
      push:
        branches: ["main"]
    
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v4
          - uses: actions/setup-node@v4
            with:
              node-version: '20.x'
          - run: npm ci
          - run: node server.js
    

    当GitHub Actions看到yml文件(这是在yaml中定义的工作流)时,它会运行它,我可以看到它在运行,但它会卡在最后一行 - run: node server.js 不断旋转齿轮图标。

    我做错了什么? 也许我不需要从工作流中运行它?

    在我的包.json我有这个

    {
      "name": "myusername.github.io",
      "version": "1.0.0",
      "type": "module",
      "description": "**Written using HTML, Javascript, Bootstrap 3 and Google API**",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "start": "server.js"
      },
      "author": "",
      "license": "ISC",
      "dependencies": {
        "cors": "^2.8.5",
        "express": "^4.18.3",
        "node-fetch": "^3.3.2",
        "xml-js": "^1.6.11"
      }
    }
    

    “script/start”指令应该启动服务器,但我不确定它是否启动,也不确定它应该在哪个步骤上运行。

    长话短说,我如何制作server.js来在我的应用程序中的GitHabPages上运行服务器,这样我就可以访问它的API了?

    请告知。

    非常感谢。

    1 回复  |  直到 1 年前
        1
  •  1
  •   Grantie    1 年前

    遗憾的是,您无法在GitHub页面上托管后端(express)服务器。

    Github Pages用于托管静态网站——只有前端,没有数据库,没有后端。

    我建议你看看 glitch.com vercel.com 以托管后端项目。