我在下面的代码中有一些问题,如果有人能把它分解,我会非常感激的。我正在尝试构建一个简单的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,并在WSO2上将它们作为API公开。API网关在那里使用一个默认端口9443。为什么这里应该是3000?
发布于 2018-02-03 19:50:38
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);在app.use('/api', router);上挂载的,所以/路由就是/api。如果您使用router.get('/users', ...),那么路线将是/api/users。
router.get(...)意味着它是GET请求的路由定义。就像router.post(...)是POST请求的路由定义一样。
最后一个问题是:为什么API有一个单独的侦听端口。
这里显示的API是一个web服务器。所有服务器必须在端口上侦听。您的数据库是它自己的服务器,它在自己的端口上监听。对于任何使用API的人来说,他们必须知道它的端口,所以它以这种方式编码并不奇怪。其实不是硬编码的。默认值是硬编码的,但是在运行服务器之前只需设置一个环境变量就可以很容易地修改它,而无需更改代码。无论如何,任何试图使用API的人都必须知道它运行在哪个主机和端口上,因为到服务器的所有连接都需要一个IP地址和一个端口。
为什么这里应该是3000?
3000是一个流行的端口号,不预先分配给任何标准服务.您可以选择没有预先分配给某种知名服务的任何端口号,并且不与服务器上运行的任何其他端口号发生冲突。这类事情经常使用3000到9999之间的范围,但是在IANA端口注册中心中,有很多端口号没有为特定的服务指定,您可以选择。
https://stackoverflow.com/questions/48598918
复制相似问题