node.js - 在生产环境中部署节点 js REST Api 并使用 react native 获取数据
问题描述
我是节点 js 的新手。我正在学习在节点 js 上创建 REST api。我在节点 js 中创建了一个基本文件并在我的本地机器上运行它工作正常,我使用邮递员对其进行测试,它也给了我结果。这是代码
const express = require('express'); //for routes
const app = express();
app.use(express.json());
// creating an array of courses
const courses = [
{ id: 1, name: 'courses1' },
{ id: 2, name: 'courses2' },
{ id: 3, name: 'courses3' },
]
// getting specific course
app.get('/api/courses/:id', (req, res) => {
const course = courses.find(c => c.id === parseInt(req.params.id));
if (!course) return res.status(404).send('the course with the given id not found.');
res.send(course);
});
// post course data
app.post('/api/courses', (req, res) => {
const { error } = validateinputs(req.body);
if (error) {
res.status(400).send(error.details[0].message);
return;
}
const course = {
id: courses.length + 1,
name: req.body.name
}
courses.push(course);
res.send(course);
});
// running on port.
const port = process.env.PORT || 3000;
app.listen(port, () => console.log('Listening on port ' + port));
这是我在本地机器上使用邮递员及其工作测试的基本代码。但现在我希望它部署在我的服务器上。我已经使用服务器控制台安装了节点和 npm。并将此文件复制到生产服务器上我新创建的项目中。像这样。
const express = require('express'); //for routes
const app = express();
app.use(express.json()); // for post
// creating an array of courses
const courses = [
{id: 1, name: 'courses1'},
{id: 2, name: 'courses2'},
{id: 3, name: 'courses3'},
]
app.get('/api', (req, res) => {
res.send('Hey');
});
// res.send(courses);
// getting specific course
app.get('/api/courses/:id', (req, res) => {
const course = courses.find(c => c.id === parseInt(req.params.id)
);
if (!course) return res.status(404).send('the course with the given id not found.');
res.send(course);
});
// running on port.
const port = process.env.PORT || 3000;
app.listen(port, () => console.log('Listening on port ' + port));
然后我在生产服务器上手动启动服务器,比如
node index.js
它给了我信息
Listening on port 3000
现在当我用邮递员测试它时它不能正常工作。我正在使用此链接,项目安装在 adroit_api 文件夹下。
https://adroit-services.co.uk/adroit_api/api
它正在向我返回此站点主页的源页面
https://adroit-services.co.uk
我不知道该怎么办。请帮忙。
谢谢
解决方案
您可能在 NodeJS Express 应用程序之外遇到路由问题。检查您的网络服务器的设置,如虚拟主机。
话虽如此,您的 API 在端口 3000 上运行,而您的 Web 服务器在端口 80 上。因此,您可能还想检查您的 API https://example.com:3000/api
(替换example.com
为您自己的服务器的 URL),因为访问https://example.com/api
意味着您正在尝试在端口 80 而不是 3000 上访问它。
另外,如果您通过访问将它们放在您的Web服务器目录中,我可以读取您的服务器端代码https://example.com/example_api/index.js
,这很可能会导致非常严重的安全漏洞。
推荐阅读
- c# - 我如何在 c# 中反序列化 json 而有些事情没有修复
- python - 误差函数的效率 - 最小化问题
- swiftui - 在不使用列表/表单的情况下拖放以重新排序文本
- azure - 具有 Timer 触发器的 WebJob 使用 Azure WebJobs SDK v3 引发异常
- html-email - 在 Html for Email 中将两个圆角矩形框重叠在一起
- ms-access-2007 - 我想使用 Dlookup 函数检查单个表中两个字段的重复值
- c# - 为什么我需要在运行 dotnet restore 之前运行 nuget restore?
- python - Tkinter:不要在 tk.Text 小部件上删除文本时推送撤消堆栈
- r - The length of the train and test sets are different from the length of the actual set
- react-native - Google.logInAsync 什么都不做