• 日常搜索
  • 百度一下
  • Google
  • 在线工具
  • 搜转载

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

node.js 和 Express 编写您的第一个 api :了解 rest API 使用 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:我们将用于我们的服务器的极简网络框架。

  • 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!在响应端向客户端发送消息。

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 和“Hello,Server!” 信息。

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

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

// 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.jsonscripts文件中的属性来自动运行这个特定的命令。

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

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

Server listening on port 3002

如果我们curl -i在 URL 上运行 a,我们将看到它现在由 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解析中间件。这就是我们的body-parser模块的用武之地。body-parser将提取传入请求的整个正文并将其解析为我们可以使用的 JSON 对象。

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

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}`);
});

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

设置路线

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

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

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

请注意,.js在 require 中不需要扩展名。现在我们将应用程序的GET监听器移动到routes.js在routes.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 数据。我们现在只使用假数据,因为我们的数据库还没有建立。

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

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

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

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

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

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

访问我们的GitHub 存储库,查看这篇文章的完整代码,并将其与您自己的代码进行比较。

结论

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



文章目录
  • 如何在 Node.js 中设置 Express API 服务器
  • 安装
  • 设置 HTTP 服务器
  • 设置 Express 服务器
  • 添加正文解析中间件
  • 设置路线
  • 结论