首页 > 解决方案 > 在生产环境中部署节点 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

我不知道该怎么办。请帮忙。

谢谢

标签: node.jsapi

解决方案


您可能在 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,这很可能会导致非常严重的安全漏洞。


推荐阅读