【问题标题】:Developing an API using nodeJS [closed]使用 nodeJS 开发 API [关闭]
【发布时间】:2018-07-13 21:54:50
【问题描述】:

我在下面的代码中有一些问题。如果有人能分解它,我将不胜感激。 我正在尝试构建一个简单的helloworldAPI。下面是代码:

var express = require('express');
var app = express();
var bodyParser=require('body-parser');
var mongoose=require('mongoose');

//configuring the app for the bosy data intake for post operations
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());

//Configuring the app to listen to the PORT
var PORT= process.env.PORT || 3000;

//connectivity to the DB
mongoose.connect('mongodb://localhost:27017/helloworldapi');

//API Routes
var router = express.Router();

//Routes will be prefixed with /API

app.use('/api', router);

//Test route
router.get('/',function(req,res){
  res.json({message: 'Welcome to our API'});

});
app.listen(PORT);
console.log('server listening on port '+PORT);
我需要帮助的代码 sn-ps 是:

app.use(bodyParser.urlencoded({extended:true}));这里,extended: true是什么意思?

var PORT= process.env.PORT || 3000;process.env.PORT 做什么?我没有在我的环境变量中设置任何端口号。

app.use('/api', router);:这是做什么的?这是否与 API 的资源有关?

router.get('/',function(req,res){ res.json({message: 'Welcome to our API'}); : API 调用如何路由到这里的回复消息?我不清楚为什么在get方法中使用/

最后一个问题:为什么 API 有一个单独的监听端口。我已经设置了mongoDB,它监听端口27017。我知道 API 网关有一个单独的端口来监听,但是在使用 nodeJS 时是否应该对其进行硬编码?因为我使用过 ESB 并将它们作为 API 在 WSO2 上公开。 API 网关在那里使用默认端口 9443。为什么这里应该是3000?

【问题讨论】:

  • 通过谷歌搜索一下就可以轻松回答所有这些问题。阅读 Express 文档
  • 嗨@Luca。感谢您的回复。我试过用谷歌搜索它们。但是我了解了代码 sn-ps 但不是整个过程。

标签: javascript node.js mongodb api


【解决方案1】:
app.use(bodyParser.urlencoded({extended:true}));

这里,extended: true 是什么意思?

body-parser 中间件的extended 选项记录在here 中。它确定使用哪个库来解析查询字符串以及查询字符串中是否支持嵌入对象。阅读文档以获取更多详细信息。如果您不想使用查询字符串做一些真正高级的事情,那么该选项可能与您无关。


var PORT= process.env.PORT || 3000;

process.env.PORT 是做什么的?我没有在我的环境变量中设置任何端口号。

这将选择运行服务器的端口。如果您的环境中有PORT=xxx,它将使用该号码。如果没有,它将使用3000


app.use('/api', router);

这是做什么的?这是否与 API 的资源有关?

这会加载一个路由器(通常会定义一组路由处理程序)并使其路由服务的根路径以/api 开头。这定义了 API 将支持的 URL,并将代码与每个 URL 挂钩。因此,如果您有/api/users,那么路由器将定义/users 路由,并且此语句会将所有内容放在/api 下,以使路由成为/api/users


router.get('/', function(req,res){
    res.json({message: 'Welcome to our API'});
});

API 调用如何路由到这里的回复消息?我不清楚为什么在get方法中使用/。

假设这是在前面提到的路由器内部,这定义了/api 的响应。由于这个路由器是由前面的代码段app.use('/api', router); 安装在/api 上的,所以/ 路由就是/api。如果你使用router.get('/users', ...),那么路由就是/api/users

router.get(...) 表示它是 GET 请求的路由定义。就像router.post(...) 是 POST 请求的路由定义一样。


最后一个问题:为什么 API 有一个单独的监听端口。

此处显示的 API 是一个 Web 服务器。所有服务器都必须侦听一个端口。您的数据库是它自己的服务器,它侦听自己的端口。对于任何使用 API 的人来说,他们必须知道它的端口,所以它被这样编码也就不足为奇了。它并不是真正的硬编码。默认值是硬编码的,但它可以很容易地修改,而无需更改代码,只需在运行服务器之前设置一个环境变量。在任何情况下,任何尝试使用 API 的人都必须知道它在哪个主机和端口上运行,因为到服务器的所有连接都需要一个 IP 地址和一个端口。


这里为什么要3000?

3000 是一个流行的端口号,未预先分配给任何标准服务。您可以选择任何未预先分配给某种知名服务且不与服务器上运行的其他任何东西冲突的端口号。 3000 到 9999 之间的范围通常用于此类事情,但在 IANA 端口注册表中,有许多端口号未指定用于您可以选择的特定服务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2011-08-26
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    相关资源
    最近更新 更多