我错过了一些关于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了?
请告知。
非常感谢。