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日

相关文章

  • Python3+Appium安装及Appium模拟微信登录方法详解

    下面我将为你详细讲解Python3 + Appium安装及Appium模拟微信登录方法详解。 安装Python3和Appium 安装Python3 Python3可以从官网 https://www.python.org/downloads/ 下载安装。 安装完成后,打开命令行窗口输入以下命令验证Python是否已成功安装: python –version …

    node js 2023年6月8日
    00
  • 实现JavaScript的组成—-BOM和DOM详解

    下面我将详细讲解一下“实现JavaScript的组成——BOM和DOM详解”的攻略。 什么是BOM和DOM BOM BOM(Browser Object Model)即浏览器对象模型,是浏览器提供的能够操作浏览器窗口、浏览器标签页、页面定时器、浏览器地址栏和浏览历史等功能的API集合。 DOM DOM(Document Object Model)即文档对象模…

    node js 2023年6月8日
    00
  • Node.js 缓冲区(Buffer)模块的方法及实例分析

    Node.js 缓冲区(Buffer)模块是 Node.js 提供的一个用于处理字节流数据的模块,它提供了一些方法可以让我们对数据进行操作。本文将在以下几个方面详细介绍 Node.js 缓冲区(Buffer)模块的方法及实例分析。 创建缓冲区 使用 Buffer.alloc() 方法来创建一个指定大小的缓冲区。 示例代码: const buf = Buffe…

    node js 2023年6月8日
    00
  • 原生JS发送异步数据请求

    下面是原生JS发送异步数据请求的完整攻略: 1. 创建XMLHttpRequest对象 XMLHttpRequest对象是用于向服务器发送请求和获取服务器响应的JavaScript API。我们需要先创建一个XMLHttpRequest对象来处理异步请求。 let xhr = new XMLHttpRequest(); 2. 设置请求参数 向服务器发送请求需…

    node js 2023年6月8日
    00
  • Node.js Koa2使用JWT进行鉴权的方法示例

    以下是详细讲解“Node.js Koa2使用JWT进行鉴权的方法示例”的完整攻略。 什么是JWT JSON Web Token (JWT) 是一个标准,用于在不同的系统之间传输信息作为 JSON 对象。JWT 可以使用秘密(使用 HMAC 算法)或使用 RSA 或 ECDSA 的公钥/私钥对来进行签名。JWT 可以包含用户的身份信息,以及应用程序需要的任何其…

    node js 2023年6月8日
    00
  • 详解基于Node.js的HTTP/2 Server实践

    详解基于Node.js的HTTP/2 Server实践 前言 HTTP/2是浏览器最新的协议,比HTTP/1.1更快、更高效。Node.js天然支持HTTP/2协议,并且使用起来也非常容易。本文将讲解如何使用Node.js创建基于HTTP/2协议的服务器。 实现步骤 创建Node.js项目:首先,需要创建一个新的Node.js项目。在终端进入到你创建项目的路…

    node js 2023年6月8日
    00
  • 通过nodejs 服务器读取HTML文件渲染到页面的方法

    首先,要实现通过nodejs服务器读取HTML文件并将其渲染到页面,我们需要用到Node.js的http、fs和path模块。 创建nodejs服务器 首先,在你的项目目录下创建一个server.js文件,使用以下代码创建一个简单的http服务器: const http = require(‘http’); http.createServer(functio…

    node js 2023年6月8日
    00
  • Node.js使用Koa搭建 基础项目

    下面我会详细讲解“Node.js使用Koa搭建基础项目”的完整攻略。 1. 安装Node.js和npm 如果您还没有安装Node.js和npm,可以前往官网 https://nodejs.org/ ,选择适合您操作系统的版本进行下载和安装。 2. 初始化项目 在命令行中使用以下命令来创建一个新的项目,例如名为“koa-demo”: $ mkdir koa-d…

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