使用Node.js实现RESTful API的示例

yizhihongxing

使用Node.js实现RESTful API是现代Web开发的一种趋势。下面是一个完整的攻略,你可以跟着这个攻略一步步实现一个简单的RESTful API。

第一步:设置项目

在项目的根目录下,打开命令行工具,依次输入以下指令:

mkdir my-restful-api
cd my-restful-api
npm init -y

这一步会创建一个名为my-restful-api的项目,并创建package.json文件。

第二步:安装依赖

我们需要使用Express.js框架来构建RESTful API,而且我们还需要用到一些插件,因此我们需要在命令行中安装Express.js和其他插件。

npm install express body-parser cookie-parser cors crypto --save

在这个命令中,我们安装了Express.js框架,以及一些插件。

  • body-parser:将请求的正文解析为JSON格式
  • cookie-parser:将Cookie解析为对象
  • cors:允许跨域请求
  • crypto:用于加密和解密数据

第三步:创建主文件

我们需要创建一个名为index.js的文件,并在其中设置我们的API。

const express = require('express');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const cors = require('cors');
const crypto = require('crypto');

const app = express();

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

const users = [
  { id: 1, username: 'user1', password: 'password1' },
  { id: 2, username: 'user2', password: 'password2' },
  { id: 3, username: 'user3', password: 'password3' },
];

app.get('/users', (req, res) => {
  res.send(users);
});

app.post('/login', (req, res) => {
  const { username, password } = req.body;
  const targetUser = users.find(user => user.username === username && user.password === password);
  if (targetUser) {
    const token = crypto.randomBytes(16).toString('hex');
    res.cookie('token', token);
    res.status(200).send({ message: 'Login successfully', accessToken: token });
  } else {
    res.status(401).send({ message: 'Unauthorized' });
  }
});

const server = app.listen(8080, () => {
  const { address, port } = server.address();
  console.log(`Listening on http://${address}:${port}`);
});

在这段代码中,我们定义了一个users数组,它表示用户数据。我们定义了两个路由:获取用户列表和登录。在登录路由中,我们检查用户的用户名和密码,如果验证通过,则发送一个名为accessToken的Cookie,并向客户端发送一条成功登录的消息。如果验证失败,则发送一个未经授权的消息。最后,我们启动服务器并监听端口。

第四步:测试API

我们的API已经设置好了,在浏览器中打开http://localhost:8080/users,可以看到我们的用户列表。在Postman中,我们可以使用POST请求http://localhost:8080/login来测试登录。为了登录成功,需要在请求体中提供一个具有正确用户名和密码的对象。登录成功后,我们将在响应体中获得一个名为accessToken的Cookie,这将允许我们访问被保护的路由。

示例一:获取用户列表

为了演示如何使用RESTful API获取用户列表,下面是一个使用jQuery的示例。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Users</title>
  </head>
  <body>
    <ul id="users"></ul>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script>
      $(document).ready(() => {
        $.get('http://localhost:8080/users', data => {
          const users = data.map(user => `<li>${user.username}</li>`);
          $('#users').html(users);
        });
      });
    </script>
  </body>
</html>

这个示例中,我们使用jQuery来发起一个GET请求,以获取用户列表。在获得响应后,我们将用户数据转换为HTML代码,并在页面上显示出来。

示例二:登录并获取保护资源

为了演示如何使用RESTful API登录并获取被保护资源,下面是一个使用Vue.js的示例。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Login</title>
  </head>
  <body>
    <div id="app">
      <div v-if="!loggedIn">
        <input type="text" v-model="username">
        <input type="password" v-model="password">
        <button @click="login">Login</button>
      </div>
      <div v-else>
        <h1>Welcome, {{ username }}!</h1>
      </div>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script>
      const app = new Vue({
        el: '#app',
        data: {
          username: '',
          password: '',
          loggedIn: false,
        },
        methods: {
          login() {
            axios.post('http://localhost:8080/login', { username: this.username, password: this.password })
              .then(response => {
                const accessToken = response.data.accessToken;
                document.cookie = `token=${accessToken}`;
                this.loggedIn = true;
              })
              .catch(error => {
                console.error(error);
              })
          },
        },
        mounted() {
          const token = document.cookie.match(/token=([^;]+)/);
          if (token) {
            axios.get('http://localhost:8080/users', { headers: { Authorization: `Bearer ${token[1]}` } })
              .then(response => {
                console.log(response.data);
                this.loggedIn = true;
              })
              .catch(error => {
                console.error(error);
              });
          }
        },
      });
    </script>
  </body>
</html>

这个示例中,我们使用Vue.js来创建一个简单的登录页面。我们在登录按钮的点击事件中使用Axios插件来发起一个POST请求以登录,然后在回调函数中将响应体中的accessToken Cookie存入cookies中,并将登陆状态设置为true。登录后,我们发送一个GET请求来访问我们的用户列表,并使用名为Authorization的HTTP头来携带访问令牌。

在这个攻略中,我们学习了如何使用Node.js和Express.js框架来实现一个简单的RESTful API,学习了如何使用jQuery和Vue.js来调用这个API。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Node.js实现RESTful API的示例 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • 爬虫利器Puppeteer实战

    Puppeteer 实战攻略 Puppeteer 是一个 Node.js 库,它提供了一个高级 API,用于控制 headless Chrome 或 Chromium 浏览器。Puppeteer 通过模拟人类的操作来完成自动化任务,因此可以用于构建各种各样的爬虫。 安装 Puppeteer 安装 Puppeteer 十分简单,只需执行以下命令即可: npm …

    node js 2023年6月8日
    00
  • nodejs实现登陆验证功能

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,许多 Web 项目都使用 Node.js 来实现后端服务。在 Web 开发中,登陆验证功能是非常常见的一个需求,本文将详细讲解如何使用 Node.js 实现登陆验证功能。 实现思路 登陆验证功能的实现一般分为以下几个步骤: 创建登录页面,用户输入账号密码提交登录请求。 服…

    node js 2023年6月8日
    00
  • 详解Nodejs基于mongoose模块的增删改查的操作

    当我们使用 Node.js 构建应用程序时,我们通常需要连接数据库操作数据。Mongoose 是一个在 Node.js 中操作 MongoDB 数据库的 ODM(对象文档映射器)模块,它使得我们可以更加方便地进行数据存储与操作。 本文将详细讲解如何使用 Mongoose 模块进行增删改查的操作,主要包括以下内容: 连接 MongoDB 数据库 定义模型(Sc…

    node js 2023年6月8日
    00
  • Node.js学习教程之Module模块

    Module是Node.js中非常重要的一个概念,它不仅充实了Node.js的功能,还简化了Node.js中的代码实现。本篇教程将详细介绍Node.js Module的定义、使用方法以及相关的注意点。 什么是Module? Module是一个可以被其他模块导入和使用的Node.js文件或文件夹。在Node.js中,任何一个.js文件都可以看作是一个Modul…

    node js 2023年6月8日
    00
  • Nodejs之TCP服务端与客户端聊天程序详解

    “Nodejs之TCP服务端与客户端聊天程序详解”是一篇关于使用Node.js编写TCP聊天程序的文章,完整攻略包括以下内容: 1. 环境搭建 首先,需要安装Node.js和npm。Node.js是一个基于JavaScript语言的服务器端运行环境,npm是Node.js的包管理工具。安装Node.js和npm后,可以使用npm安装必要的模块,如net模块、…

    node js 2023年6月8日
    00
  • 如何用Node写页面爬虫的工具集

    如何用Node写页面爬虫的工具集? 一、准备工作 安装Node.js环境。 安装Node.js的包管理器npm,安装方法为在终端中输入npm install npm -g。 安装request、cheerio、iconv-lite等Node模块,这些模块用于发起网络请求、解析HTML页面内容和处理编码问题,命令行方式为npm install request …

    node js 2023年6月8日
    00
  • node+vue前后端分离实现登录时使用图片验证码功能

    一、前言 前后端分离的应用现在越来越普及,如何实现前后端分离并且实现一些常见的功能逐渐成为一个必须要掌握的技能。 其中注册和登录是所有网站必备的功能。而且在现在的互联网环境中,为了防止恶意攻击等一些非法行为,很多站点都会在登录时使用验证码的方式进行验证。 那么,在本篇文章中,我们就来详细讲解一下如何在node和vue的前后端分离项目中实现登录时使用图片验证码…

    node js 2023年6月8日
    00
  • Node.js 中的 fs 模块与Path模块方法详解

    下面是“Node.js 中的 fs 模块与 Path 模块方法详解”攻略: Node.js 中的 fs 模块与 Path 模块方法详解 什么是 fs 模块? fs 模块被称为文件系统模块,是 Node.js 内置模块之一,它提供了读写文件的能力。它通过提供诸如读取、写入、更改、删除等操作文件的 API 来帮助我们完成文件系统的操作。 常用 fs 模块方法 这…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部