使用Node.js和Express编码您的第一个API:设置服务器

如何在Node.js中设置Express API服务器

在上一教程中 ,我们了解了REST体系结构,REST的六个指导约束,如何理解HTTP请求方法及其响应代码以及RESTful API端点的结构。

在本教程中,我们将为我们的API设置一个服务器。 您可以使用任何编程语言和服务器软件来构建API,但是我们将使用Node.js (即JavaScript的后端实现)和Express (一种流行的,最小的Node框架)。

安装

我们的第一个前提条件是确保在计算机上全局安装Node.js和npm。 我们可以使用-v标志进行测试,这将显示版本。 打开命令提示符,然后键入以下内容。

node -v && npm -v
v10.8.0
6.2.0

您的版本可能与我的版本略有不同,但是只要两者都存在,我们就可以开始。

让我们创建一个名为express-api的项目目录并移至该目录。

mkdir express-api && cd express-api

现在我们位于新目录中,可以使用init命令初始化项目。

npm init

该命令将提示您回答有关项目的一些问题,您可以选择是否填写。 设置完成后,您将拥有一个如下所示的package.json文件:

{
  "name": "express-api",
  "version": "1.0.0",
  "description": "Node.js and Express REST API",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Tania Rascia",
  "license": "MIT"
}

现在我们有了package.json ,我们可以安装项目所需的依赖项了。 幸运的是,我们不需要太多的依赖关系,只需下面列出的这四个即可。

  • body-parser :主体解析中间件。
  • express :我们将用于服务器的极简Web框架。
  • mysql :一个MySQL驱动程序。
  • request (可选):进行HTTP调用的一种简单方法。

我们将在每个依赖项之后使用install命令,以完成项目的设置。

npm install body-parser express mysql request

这将创建一个package-lock.json文件和一个node_modules目录,我们的package.json将更新为如下所示:

{
  "name": "express-api",
  "version": "1.0.0",
  "description": "Node.js and Express REST API",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Tania Rascia",
  "license": "MIT",
  "dependencies": {
  "dependencies": {
    "body-parser": "^1.18.3",
    "express": "^4.16.3",
    "mysql": "^2.16.0",
    "request": "^2.88.0"
  }
}

设置HTTP服务器

在开始设置Express服务器之前,我们将使用Node的内置http模块快速设置HTTP服务器,以了解简单服务器的工作方式。

创建一个名为hello-server.js的文件。 加载http模块,设置端口号(我选择3001 ),然后使用createServer()方法创建服务器。

// Build a server with Node's HTTP module
const http = require('http');
const port = 3001;
const server = http.createServer();

在介绍性的REST文章中,我们讨论了关于HTTP服务器的请求和响应。 我们将设置服务器以处理请求,并在服务器端显示请求的URL,并显示Hello服务器! 消息发送给响应方的客户端。

server**on('request'** (request, response) => {
    console.log(`URL: ${request.url}`);
    response.end('Hello, server!')
})

最后,我们将告诉服务器要侦听哪个端口,如果有,则显示错误。

// Start the server
server.listen(port, (error) => {
    if (error) return console.log(`Error: ${error}`);

    console.log(`Server is listening on port ${port}`)
})

现在,我们可以使用node和文件名来启动服务器。

node hello-server.js

您将在终端中看到以下响应:

Server is listening on port 3001

要检查服务器是否正在实际运行,请在浏览器的地址栏中访问https://localhost:3001/ 。 如果一切正常,您应该看到“ 服务器您好”! 在页面上。 在您的终端中,您还将看到所请求的URL。

URL: /
URL: /favicon.ico

如果要导航到http://localhost:3001/hello ,则会看到URL: /hello

我们还可以在本地服务器上使用cURL,它将向我们显示返回的确切标头和正文。

curl -i http://localhost:3001
HTTP/1.1 200 OK
Date: Wed, 15 Aug 2018 22:14:23 GMT
Connection: keep-alive
Content-Length: 14

Hello, server!

如果您随时关闭终端窗口,则服务器将消失。

现在我们已经知道服务器,请求和响应如何协同工作,我们可以在Express中重写它,它具有更简单的界面和扩展功能。

设置Express服务器

我们将创建一个新文件app.js ,它将是我们实际项目的入口。 就像原始的http服务器一样,我们将需要一个模块并设置一个端口以启动。

创建一个app.js文件,并将以下代码放入其中。

// Require packages and set the port
const express = require('express');
const port = 3002;
const app = express();

现在,代替查找所有请求,我们将明确声明要在服务器根目录( / )上查找GET请求。 当/收到请求时,我们将显示请求的URL和“您好,服务器!”。 信息。

app.get('/', (request, response) => {
    console.log(`URL: ${request.url}`);
    response.send('Hello, Server!');
});

最后,我们将使用listen()方法在端口3002上启动服务器。

// Start the server
const server = app.listen(port, (error) => {
    if (error) return console.log(`Error: ${error}`);

    console.log(`Server listening on port ${server.address().port}`);
});

我们可以像以前一样使用node app.js启动服务器,但是我们也可以修改package.json文件中的scripts属性以自动运行此特定命令。

"scripts": {
  "start": "node app.js"
},

现在,我们可以使用npm start启动服务器,并且我们将在终端中看到服务器消息。

Server listening on port 3002

如果在URL上运行curl -i ,我们将看到它现在由Express提供支持,并且还有一些其他标头,例如Content-Type

curl -i http://localhost:3002
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 14
ETag: W/"e-gaHDsc0MZK+LfDiTM4ruVL4pUqI"
Date: Wed, 15 Aug 2018 22:38:45 GMT
Connection: keep-alive

Hello, Server!

添加主体解析中间件

为了轻松处理对我们的API的POSTPUT请求,我们将添加正文解析中间件。 这就是我们的body-parser模块进入的地方body-parser body-parser将提取传入请求的整个主体,并将其解析为我们可以使用的JSON对象。

我们只需要在文件顶部添加模块即可。 将以下require语句添加到app.js文件的顶部。

const bodyParser = require('body-parser');
...

然后,我们告诉Express应用程序使用body-parser ,并查找JSON。

// Use Node.js body parsing middleware
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true,
}));

另外,让我们更改消息以发送JSON对象作为响应而不是纯文本。

response.send({message: 'Node.js and Express REST API'});

以下是目前的完整app.json文件。

// Require packages and set the port
const express = require('express');
const port = 3002;
const bodyParser = require('body-parser');
const app = express();

// Use Node.js body parsing middleware
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true,
}));

app.get('/', (request, response) => {
    response.send({
        message: 'Node.js and Express REST API'}
    );
});

// Start the server
const server = app.listen(port, (error) => {
    if (error) return console.log(`Error: ${error}`);

    console.log(`Server listening on port ${server.address().port}`);
});

如果将curl -i发送到服务器,您将看到标题现在返回Content-Type: application/json; charset=utf-8 Content-Type: application/json; charset=utf-8

设定路线

到目前为止,我们只有到根( / )的GET路由,但是我们的API应该能够处理多个URL上的所有四个主要HTTP请求方法。 我们将设置一个路由器,并显示一些假数据。

让我们创建一个名为routes的新目录,以及一个名为routes.js的文件。 我们将在app.js的顶部链接到它。

const routes = require('./routes/routes');

请注意,在require中不需要.js扩展名。 现在,我们将应用程序的GET侦听器移动到route.js 。 在route.js中输入以下代码。

const router = app => {
    app.get('/', (request, response) => {
        response.send({
            message: 'Node.js and Express REST API'
        });
    });
}

最后,导出router以便我们可以在app.js文件中使用它。

// Export the router
module.exports = router;

app.js,更换app.get()你的电话之前有代码routes()

routes(app);

现在,您应该可以访问http://localhost:3002并看到与以前相同的内容。 (不要忘记重新启动服务器!)

一旦一切都设置好并正常工作,我们将通过另一条路线提供一些JSON数据。 由于我们的数据库尚未建立,我们现在仅使用伪数据。

让我们在route.js中创建一个users变量, 其中包含一些JSON格式的虚假用户数据。

const users = [{
        id: 1,
        name: "Richard Hendricks",
        email: "richard@piedpiper.com",
    },
    {
        id: 2,
        name: "Bertram Gilfoyle",
        email: "gilfoyle@piedpiper.com",
    },
];

我们将向路由器/users添加另一个GET路由,并通过发送用户数据。

app.get('/users', (request, response) => {
    response.send(users);
});

重新启动服务器后,您现在可以导航到http://localhost:3002/users并查看显示的所有数据。

注意:如果浏览器上没有JSON查看器扩展,强烈建议您下载其中的一个,例如JSONView for Chrome。 这将使数据更易于阅读!

访问我们的GitHub Repo以查看此帖子的完整代码,并将其与您自己的代码进行比较。

结论

在本教程中,我们学习了如何在节点中设置内置的HTTP服务器和Express服务器,路由请求和URL,以及通过get请求使用JSON数据。

在RESTful API系列的最后一部分中,我们将Express服务器连接到MySQL,以在数据库中创建,查看,更新和删除用户,从而完成API的功能。

翻译自: https://code.tutsplus.com/tutorials/code-your-first-api-with-nodejs-and-express-set-up-the-server--cms-31698

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值