使用 nodeJS 开发 API



我在下面的代码中有一些问题。如果有人能分解它,我将不胜感激。 我正在尝试构建一个简单的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);
我在这里需要帮助的代码片段是:

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?

app.use(bodyParser.urlencoded({extended:true}));

在这里,扩展:真实是什么意思?

此处记录了正文解析器中间件的extended选项。 它确定使用哪个库来分析查询字符串,以及查询字符串中是否支持嵌入对象。 阅读文档了解更多详情。 如果您不尝试使用查询字符串执行真正高级的操作,则该选项可能与您无关。


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 端口注册表中,有很多端口号没有为您可以选择的特定服务指定。

最新更新