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日

相关文章

  • 提高Node.js性能的应用技巧分享

    提高Node.js性能的应用技巧分享 在开发Node.js应用时,性能是非常重要的因素。本文分享几个提高Node.js性能的应用技巧,帮助你编写更快、更稳定的应用。 使用PM2进行进程管理 PM2是一个流行的Node.js进程管理工具,可以帮助你管理你的Node.js应用,例如启动应用、监控状态、自动重新启动等。此外,PM2还可以方便地进行负载均衡,使得你的…

    node js 2023年6月8日
    00
  • node.js实现登录注册页面

    下面是详细讲解“node.js实现登录注册页面”的完整攻略。 1. 环境搭建 首先需要安装Node.js运行环境和npm包管理器,可以到Node.js官网下载并安装。 安装完成后,进入命令行工具,使用npm安装Express框架和相关的模块: npm install express express-session express-validator body…

    node js 2023年6月8日
    00
  • javascript 小数乘法结果错误的处理方法

    这里是详细讲解“JavaScript小数乘法结果错误的处理方法”的完整攻略。 问题描述 在JavaScript中,对于两个小数进行乘法运算时,有时会出现结果错误的问题,例如: 0.1 * 0.2 // 返回 0.020000000000000004 事实上,正确的结果应该是0.02,这种错误会给数值计算带来一定的困扰。那么为什么会出现这种问题呢? 问题原因 …

    node js 2023年6月8日
    00
  • 异步JavaScript编程中的Promise使用方法

    下面详细讲解异步JavaScript编程中Promise的使用方法。 Promise是什么? Promise,即“承诺”,是异步编程中常用的一种解决方案,它是ES6引入的标准化解决方案。Promise代表一个异步操作的最终完成或失败,并且可以获取其返回值或错误信息。Promise有三种状态:pending(进行中)、fulfilled(已成功)和reject…

    node js 2023年6月8日
    00
  • 为什么node.js不适合大型项目

    为什么Node.js不适合大型项目? Node.js很适合用于构建高性能、事件驱动、非阻塞的应用程序,因为它是基于V8引擎和事件循环构建的,可以处理大量并发连接。但是,Node.js并不是适合所有类型的应用程序。在以下情况下,Node.js可能不适合大型项目: 长时间运行的计算密集型任务 对于那些需要大量计算和复杂操作的应用程序来说,Node.js可能会遇到…

    node js 2023年6月8日
    00
  • Angularjs—项目搭建图文教程

    AngularJS 项目搭建图文教程 AngularJS 是一款流行的前端 JavaScript 框架,它可以帮助开发者快速构建单页应用程序。本文将演示如何在自己的电脑上搭建 AngularJS 项目的环境并进行开发。 1. 安装 Node.js Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。安装了 Node.js,…

    node js 2023年6月8日
    00
  • 从0搭建vue-cli4脚手架

    下面详细讲解从0搭建vue-cli4脚手架的完整攻略。 简介 Vue.js是一个渐进式JavaScript框架,旨在实现简单、易学、高效、灵活的开发方式。Vue-cli是vuejs官方提供的一个基于Webpack的脚手架工具,可以快速搭建SPA应用程序的基本开发框架,是Vuejs的标准构建工具,也是Vue项目开发的标配。 本文将详细讲述如何从0开始搭建Vue…

    node js 2023年6月8日
    00
  • nodejs下打包模块archiver详解

    Node.js 下打包模块 archiver 详解 简介 archiver 是一个基于 Node.js 的打包压缩模块,可以用于创建 zip、tar 等格式的文件。它内部是使用 Node.js 的 stream 实现的,可以流式地处理大规模的文件。 安装 可以使用 npm 在项目中安装 archiver 模块: npm install archiver 使用…

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