Node下的数据库操作——Sequelize
2017-07-26 13:42
204 查看
Async/Await应该是目前最简单的异步方案了,这里我们将使用它进行数据库操作。先来说一下它的基本规则:
async 表示这是一个async函数,await只能用在这个函数里面。
await 表示在这里等待promise返回结果了,再继续执行。
await 后面跟着的应该是一个promise对象(当然,其他返回值也没关系,只是会立即执行,不过那样就没有意义了…)
这里我们选择Node的ORM框架Sequelize来操作数据库。
因为Sequelize返回的对象是Promise,所以我们可以用then()和catch()分别异步响应成功和失败。
但是用then()和catch()仍然比较麻烦。有没有更简单的方法呢?
可以用ES7的await来调用任何一个Promise对象,这样我们写出来的代码就变成了:
await等待的虽然是promise对象,但不必写.then(..),直接可以得到返回值。当我们使用await写时,既然.then(..)不用写了,那么.catch(..)也不用写,可以直接用标准的try catch语法捕捉错误。
下面来看一个完整的实例:
先在config.js中写入配置文件
然后就可以在app.js中操作数据库了:
因为Sequelize类是引用sequlize模块后获取一个顶级对象,我们通过它来创建sequlize实例,也可以通过该对象来获取模内其它对象的引用,如:Utils工具类、Transaction事务类等。创建实例后,可以通过实例来创建或定义Model(模型)、执行查询、同步数据库结构等操作。
首先我们要知道Model相当于数据库中表,有时它也会被称为“模型”或“工厂”。Model不能通过构造函数创建,而只能通过sequlize.define方法来定义或通过sequlize.import导入。通过define定义一个Model,就相当于定义了一种模型与数据表之间的映射关系,通过模型可以实现对表记录的增、删、改、查等操作。
因为只是简单实例就没有写暴露接口,全部堆在app.js中使用匿名函数立即执行的方式进行运行,在实际开发中应当分成不同模块暴露接口供其他模块调用即可。
以下是运行的结果:
async 表示这是一个async函数,await只能用在这个函数里面。
await 表示在这里等待promise返回结果了,再继续执行。
await 后面跟着的应该是一个promise对象(当然,其他返回值也没关系,只是会立即执行,不过那样就没有意义了…)
这里我们选择Node的ORM框架Sequelize来操作数据库。
因为Sequelize返回的对象是Promise,所以我们可以用then()和catch()分别异步响应成功和失败。
但是用then()和catch()仍然比较麻烦。有没有更简单的方法呢?
可以用ES7的await来调用任何一个Promise对象,这样我们写出来的代码就变成了:
(async () => { var pets = await Pet.findAll(); })();
await等待的虽然是promise对象,但不必写.then(..),直接可以得到返回值。当我们使用await写时,既然.then(..)不用写了,那么.catch(..)也不用写,可以直接用标准的try catch语法捕捉错误。
(async () =>{ try{ var pets = await queryFromSomewhere("rabbit"); for (let p of pets) { await p.destroy(); } }catch(err) { console.log(err); } })();
下面来看一个完整的实例:
先在config.js中写入配置文件
var config = { database: 'test', // 使用哪个数据库 username: 'root', // 用户名 password: '12345', // 口令 host: 'localhost', // 主机名 port: 3306 // 端口号,MySQL默认3306 }; module.exports = config;
然后就可以在app.js中操作数据库了:
const Sequelize = require('sequelize');
const config = require('./config');
//创建一个sequelize对象实例:
var sequelize = new Sequelize(config.database, config.username, config.password, {
host: config.host,
dialect: 'mysql',
pool: {
max: 5,
min: 0,
idle: 30000
}
});
//定义模型Pet,告诉Sequelize如何映射数据库表:
var Pet = sequelize.define('pet', {
id: {
type: Sequelize.STRING(50),
primaryKey: true
},
name: Sequelize.STRING(100),
gender: Sequelize.BOOLEAN,
birth: Sequelize.STRING(10),
createdAt: Sequelize.BIGINT,
updatedAt: Sequelize.BIGINT,
version: Sequelize.BIGINT
}, {
timestamps: false
});
//写入数据
var now = Date.now();
(async () => {
var dog = await Pet.create({
id: 'd-' + now,
name: 'haha',
gender: false,
birth: '2008-08-08',
createdAt: now,
updatedAt: now,
version: 0
});
console.log('created: ' + JSON.stringify(dog));
})();
// 查询成功后会返回包含多个实例(instance)的数组。
var queryFromSomewhere = async (animals) =>
{
var pets = await Pet.findAll({
where: {
name: animals||'pig'
}
});
console.log(`find ${pets.length} pets:`);
for (let p of pets) {
console.log(JSON.stringify(p));
}
return pets;
};
// 通过获取的示例进行数据更新
(async () => {
try{
var pets = await queryFromSomewhere("dog");
for (let p of pets) {
p.gender = true;
p.updatedAt = Date.now();
p.version++;
await p.save();
}
}catch(err){
console.log(err);
}
})();
// 通过获取的示例进行数据更新
(async () =>{ try{ var pets = await queryFromSomewhere("rabbit"); for (let p of pets) { await p.destroy(); } }catch(err) { console.log(err); } })();
因为Sequelize类是引用sequlize模块后获取一个顶级对象,我们通过它来创建sequlize实例,也可以通过该对象来获取模内其它对象的引用,如:Utils工具类、Transaction事务类等。创建实例后,可以通过实例来创建或定义Model(模型)、执行查询、同步数据库结构等操作。
首先我们要知道Model相当于数据库中表,有时它也会被称为“模型”或“工厂”。Model不能通过构造函数创建,而只能通过sequlize.define方法来定义或通过sequlize.import导入。通过define定义一个Model,就相当于定义了一种模型与数据表之间的映射关系,通过模型可以实现对表记录的增、删、改、查等操作。
因为只是简单实例就没有写暴露接口,全部堆在app.js中使用匿名函数立即执行的方式进行运行,在实际开发中应当分成不同模块暴露接口供其他模块调用即可。
以下是运行的结果:
相关文章推荐
- node 使用 sequelize 操作数据库不完全指北
- Node.js操作Firebird数据库教程
- node+sequelize实现单表多表操作
- node.js 开发指南 – Node.js 连接 MySQL 并进行数据库操作
- node.js 开发指南 – Node.js 连接 MySQL 并进行数据库操作
- Node.js数据库操作之连接MySQL数据库(一)
- Node.js 数据库 简单操作
- Node.js 连接 MySQL 并进行数据库操作
- Node.js Sequelize如何实现数据库的读写分离
- MFC+mongodb+nodejs 数据库的读取与写入操作
- Node.js使用Sequelize操作MySQL
- nodejs+sequelize操作mysql数据库
- ST API文档-Node-XAMPP数据库相关操作
- Node.js操作Firebird数据库教程
- Node.js使用Sequelize操作MySQL
- sequelize node数据库连接库
- Node.js数据库操作之查询MySQL数据库(二)
- node.js 操作postgresql数据库(2)
- node.js操作数据库
- Node.JS使用Sequelize操作MySQL的示例代码