我对 Node.js 服务如何托管在 GitHub Pages 上有些了解。
例如,我有一个 JavaScript / HTML 项目正在部署到 GitHub 并自动发布到 GitHub Pages,因此我可以导航到
https://myusername.github.io/
并查看正在运行的 Web 应用程序。
现在,直到这一刻,我都没有使用任何 API。
我想添加我自己用 Node.js 编写的 API,这是一个使用 Node.js Express 库的简单 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
不断旋转该齿轮图标。
我做错了什么? 也许我不需要从工作流程中运行它?
在我的 package.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"
}
}
“脚本/启动”指令应该启动服务器,但我不确定是否是这样以及或者应该在哪一步运行。
那么,长话短说,如何让 server.js 在我的应用程序中的 GitHab Pages 上运行服务器,以便我可以访问其 API?
请指教。
谢谢你。
遗憾的是,您无法在 GitHub 页面上托管后端(快速)服务器。
Github Pages 用于托管静态网站——只有前端,没有数据库,没有后端。
我建议您查看 glitch.com 和 vercel.com 来托管后端项目。