Nodejs + sequelize 实现增删改查操作

下面是详细讲解 "Node.js + Sequelize 实现增删改查操作" 的完整攻略。

简介

Sequelize 是一个基于 Node.js 的 ORM(Object-Relational Mapping) 框架,提供了方便的方式操作各种不同类型的数据库。

Node.js 是一个基于 Chrome V8 JavaScript 引擎构建的 JavaScript 运行时,它可以让 JavaScript 在服务器端运行,具有高效、可扩展性、易学易用等优点。

将 Node.js 和 Sequelize 结合使用,可以方便地进行数据库增删改查的操作。

实现

安装依赖

首先需要在项目中安装必要的依赖,包括安装 Node.js 和 Sequelize:

# 安装 Node.js
# 下载地址:https://nodejs.org/en/download/
# 安装 Sequelize
npm install --save sequelize
# 安装 Sequelize 各种数据库的驱动
npm install --save mysql2
npm install --save sqlite3

其中,mysql 和 sqlite 是 Sequelize 支持的数据库类型之一,可根据实际情况进行选择。

创建模型

使用 Sequelize 进行增删改查的操作需要先创建相应的模型。在这里以一个图书管理系统为例,创建 Book 模型。

// book.js

const Sequelize = require('sequelize');
const sequelize = new Sequelize('sqlite::memory:');

const Book = sequelize.define('book', {
  title: {
    type: Sequelize.STRING,
    allowNull: false
  },
  author: {
    type: Sequelize.STRING
  },
  description: {
    type: Sequelize.STRING
  },
  price: {
    type: Sequelize.DECIMAL
  }
});

module.exports = Book;

上述代码中,定义了一个名为 Book 的模型,在数据库中对应的表名为 books。

模型中定义了 title、author、description 和 price四个属性,分别为字符串、字符串、字符串和十进制数,其中 title 为必选属性,其他属性均为可选属性。

连接数据库

在使用 Sequelize 进行操作前,需要先进行数据库连接。这里可以使用 sequelize.sync() 方法实现数据库连接。

// app.js

const sequelize = new Sequelize('sqlite::memory:');

sequelize
  .sync()
  .then(() => {
    console.log('Database connected');
  })
  .catch((err) => {
    console.error(`Database connection error: ${err}`);
  })

上述代码中,使用 sequelize.sync() 方法连接数据库。如果连接成功,输出 "Database connected"。如果连接失败,输出具体的错误信息。

创建实例

模型定义好后,就可以使用该模型来创建实例。

// app.js

const sequelize = new Sequelize('sqlite::memory:');
const Book = require('./book');

// 创建一个 Book 实例
const book = Book.build({
  title: 'Node.js in Action',
  author: 'Mike Cantelon',
  description: 'Node.js in Action, Second Edition is a thoroughly revised book based on the best-selling first edition.',
  price: 39.99
});

上述代码中,创建了一个名为 book 的实例。该实例包括了 Book 模型中定义的所有属性。

查询数据

查询数据是数据库操作中最为常见的操作,使用 Sequelize 查询数据也非常简单。

查询所有数据

查询所有数据可以使用 findAll() 方法:

// app.js

const sequelize = new Sequelize('sqlite::memory:');
const Book = require('./book');

Book.findAll().then((books) => {
  console.log(books);
});

上述代码中,使用 Book.findAll() 方法查询所有数据,并通过 then() 方法获取查询结果。在控制台中打印所有查询结果。

根据条件查询

也可以根据条件进行查询,例如根据 title 进行模糊查询。

// app.js

const sequelize = new Sequelize('sqlite::memory:');
const Book = require('./book');

Book.findAll({ where: { title: { [Sequelize.Op.like]: '%Node%' } } }).then((books) => {
  console.log(books);
});

上述代码中,使用 Book.findAll() 方法根据 title 进行模糊查询,并通过 then() 方法获取查询结果。在控制台中打印符合条件的查询结果。

新增数据

使用 Sequelize 新增数据,可以使用 create() 方法。

// app.js

const sequelize = new Sequelize('sqlite::memory:');
const Book = require('./book');

Book.create({
  title: 'JavaScript: The Good Parts',
  author: 'Douglas Crockford',
  description: 'JavaScript has bad parts that many times overshadow it’s good parts. Douglas claims JavaScript has, “some of the best parts of any programming language ever created.”',
  price: 24.99
}).then(() => {
  console.log('New book added');
});

上述代码中,使用 Book.create() 方法添加一本新书,如果添加成功,在控制台中输出 "New book added"。

更新数据

使用 Sequelize 更新数据,可以使用 update() 方法。

// app.js

const sequelize = new Sequelize('sqlite::memory:');
const Book = require('./book');

Book.update(
  { price: 19.99 },
  { where: { title: 'JavaScript: The Good Parts' } }
).then(() => {
  console.log('Book updated');
});

上述代码中,使用 Book.update() 方法更新价格。在控制台中输出 "Book updated"。

删除数据

使用 Sequelize 删除数据,可以使用 destroy() 方法。

// app.js

const sequelize = new Sequelize('sqlite::memory:');
const Book = require('./book');

Book.destroy({ where: { title: 'JavaScript: The Good Parts' } }).then(() => {
  console.log('Book deleted');
});

上述代码中,使用 Book.destroy() 方法删除一本书。在控制台中输出 "Book deleted"。

示例说明

这里提供两个示例说明,分别是:使用 Express.js 框架,以及使用 MySQL 数据库。

Express.js 示例

下面是一个使用 Express.js 框架,实现增删改查操作的示例。

// app.js

const express = require('express');
const app = express();

const Sequelize = require('sequelize');
const sequelize = new Sequelize('sqlite::memory:', { logging: false });

const Book = sequelize.define('book', {
  title: {
    type: Sequelize.STRING,
    allowNull: false
  },
  author: {
    type: Sequelize.STRING
  },
  description: {
    type: Sequelize.STRING
  },
  price: {
    type: Sequelize.DECIMAL
  }
});

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

app.get('/books', async (req, res) => {
  try {
    const books = await Book.findAll();
    res.send(books);
  } catch (err) {
    res.status(500).send(err);
  }
});

app.post('/books', async (req, res) => {
  try {
    const book = await Book.create({
      title: req.body.title,
      author: req.body.author,
      description: req.body.description,
      price: req.body.price
    });
    res.send(book);
  } catch (err) {
    res.status(500).send(err);
  }
});

app.put('/books/:id', async (req, res) => {
  try {
    const [result] = await Book.update(
      {
        title: req.body.title,
        author: req.body.author,
        description: req.body.description,
        price: req.body.price
      },
      { where: { id: req.params.id } }
    );
    if (result === 1) {
      const book = await Book.findByPk(req.params.id);
      res.send(book);
    } else {
      res.status(404).send();
    }
  } catch (err) {
    res.status(500).send(err);
  }
});

app.delete('/books/:id', async (req, res) => {
  try {
    const result = await Book.destroy({ where: { id: req.params.id } });
    if (result === 1) {
      res.send();
    } else {
      res.status(404).send();
    }
  } catch (err) {
    res.status(500).send(err);
  }
});

sequelize
  .sync()
  .then(() => {
    app.listen(3000, () => {
      console.log('Server started');
    });
  })
  .catch((err) => {
    console.error(`Server startup error: ${err}`);
  });

上述代码中,定义了一个 Express 应用,并使用 Book 模型进行增删改查操作。

GET /books: 查询所有图书数据

POST /books: 新增图书数据

PUT /books/:id: 更新指定 id 的图书数据

DELETE /books/:id: 删除指定 id 的图书数据

MySQL 示例

下面是一个使用 MySQL 数据库,实现增删改查操作的示例。

// app.js

const Sequelize = require('sequelize');
const sequelize = new Sequelize('book_db', 'root', 'password', {
  host: 'localhost',
  dialect: 'mysql'
});

const Book = sequelize.define('book', {
  title: {
    type: Sequelize.STRING,
    allowNull: false
  },
  author: {
    type: Sequelize.STRING
  },
  description: {
    type: Sequelize.STRING
  },
  price: {
    type: Sequelize.DECIMAL
  }
});

sequelize
  .authenticate()
  .then(() => {
    console.log('Database connected');
    return sequelize.sync({ force: true });
  })
  .then(() => {
    console.log('Schema synchronized');
    return Book.create({
      title: 'Node.js in Action',
      author: 'Mike Cantelon',
      description: 'Node.js in Action, Second Edition is a thoroughly revised book based on the best-selling first edition.',
      price: 39.99
    });
  })
  .then(() => {
    return Book.findAll();
  })
  .then((books) => {
    console.log(books);
  })
  .catch((err) => {
    console.error(`Database connection error: ${err}`);
  });

上述代码中,连接了一个 MySQL 数据库,并使用 Book 模型进行增删改查操作。

首先使用 sequelize.authenticate() 方法进行数据库连接测试,并使用 sequelize.sync() 方法创建表及表结构。然后使用 Book.create() 方法添加一本书,并使用 Book.findAll() 方法查询原有的所有书籍,并输出在控制台中。

结语

以上就是使用 Node.js + Sequelize 进行增删改查操作的相关内容。虽然 Sequelize 提供了很多方便的方法,但在实际开发过程中,需要根据具体业务需求进行选择。同时,在连接数据库时,还需要考虑如何保证数据库的安全性及可扩展性等问题,以便满足长期的发展需求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Nodejs + sequelize 实现增删改查操作 - Python技术站

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

相关文章

  • 超实用的JavaScript表单代码段

    当我们构建一个网站或者应用程序时,表单通常是至关重要的一部分。为了使表单更加美观、实用和易于使用,JavaScript可以帮助我们实现各种功能。 本文将介绍一些超实用的JavaScript表单代码段,帮助你改善表单的互动性并增强用户体验。具体步骤如下: 一、表单验证 表单验证是为了避免用户输入的数据不符合要求,从而增强表单的可靠性。下面的代码演示了一个简单的…

    node js 2023年6月8日
    00
  • 详解使用 Node.js 开发简单的脚手架工具

    标题:详解使用 Node.js 开发简单的脚手架工具 什么是脚手架工具 脚手架工具是一种快速生成项目基础结构的工具,它可以帮助我们快速生成项目的基础目录结构、配置文件以及一些公共的代码,从而可以减少我们在创建项目时的重复性劳动。 使用 Node.js 开发脚手架工具的流程 1. 了解 Node.js 首先,了解 Node.js 是开发脚手架工具的前提。Nod…

    node js 2023年6月7日
    00
  • 二叉树的非递归后序遍历算法实例详解

    二叉树的非递归后序遍历算法实例详解 二叉树的后序遍历是先遍历左子树,再遍历右子树,最后遍历根节点的顺序。使用递归方式实现比较简单,但是非递归方式实现却有一定难度。 本文将详细讲解如何使用非递归方式实现二叉树的后序遍历,并提供相应的示例说明。 算法思路 可以使用两个栈来实现二叉树的后序遍历。 首先将根节点压入栈A中,然后从栈A中弹出一个节点,将该节点压入栈B中…

    node js 2023年6月8日
    00
  • 通过V8源码看一个关于JS数组排序的诡异问题

    下面来详细讲解“通过V8源码看一个关于JS数组排序的诡异问题”的完整攻略。 1. 了解排序算法 首先,我们需要了解常见的排序算法,例如快速排序、冒泡排序、插入排序等。了解这些算法可以帮助我们更好地理解JS内置的Array.prototype.sort()方法是如何进行排序的。 2. 查看V8源码 V8是Node.js和Google Chrome浏览器的Jav…

    node js 2023年6月8日
    00
  • Node.js笔记之process模块解读

    Node.js笔记之process模块解读 什么是process模块? 在Node.js中,process是一个全局对象,它提供了与当前Node.js程序进程相关的信息和控制。process模块允许Node.js程序与进程进行交互,例如可以从输入输出流中读写数据,也可以控制进程的运行环境。 process模块的常用方法和属性 process.env proc…

    node js 2023年6月8日
    00
  • 使用imba.io框架得到比 vue 快50倍的性能基准

    使用imba.io框架得到比vue快50倍的性能基准是基于一个开源项目的比较得出的结论。下面是如何进行该测试的攻略: 1. 准备工作 首先,需要确保计算机上已经安装了Node.js和NPM。然后,在命令行中运行以下命令来安装依赖项: npm install -g vue-cli npm install -g imba 这将安装Vue和Imba的命令行工具。 …

    node js 2023年6月8日
    00
  • Node.js中package.json中库的版本号(~和^)

    在Node.js中,库的版本号是非常重要的,因为它决定了我们在项目中使用的库的具体版本。在package.json中,我们可以为依赖项指定特定版本的库,也可以使用波浪线(~)和尖号(^)来指定一定范围内的版本。 使用波浪线(~)指定依赖库的版本 波浪线是指定版本范围的一种方式,它表示匹配指定版本及其后续的修订版,但不匹配更大的版本。例如,在package.j…

    node js 2023年6月8日
    00
  • 浅谈Webpack是如何打包CommonJS的

    Webpack是一个JavaScript应用程序的打包工具,它能够把应用程序的多个模块打包成单一的JS文件。而CommonJS是一种模块化规范,可用于客户端和服务器端JavaScript环境。 在这里,我们详细讲解Webpack打包CommonJS模块的过程,以下是攻略: 1. 安装Webpack和CommonJS模块 在开始使用Webpack打包Commo…

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