使用nodeJS开发API

时间:2018-02-03 15:22:32

标签: javascript node.js mongodb 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有一个单独的侦听PORT。我已经设置了mongoDB,它监听端口27017。我知道API网关有一个单独的端口,它会监听,但是在使用nodeJS时它是否应该硬编码?因为我使用过ESB并在WSO2上将它们公开为API。 API网关在那里使用默认端口9443。为什么这里应该是3000?

1 个答案:

答案 0 :(得分:2)

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

这里,扩展名是什么意思?

身体解析器中间件的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的响应。由于此路由器由前一个代码/api安装在app.use('/api', router);,因此/路由只是/api。如果您使用router.get('/users', ...),则路线为/api/users

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

  

最后一个问题:为什么API有一个单独的侦听PORT。

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

  

为什么这里应该是3000?

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