+
95
-

回答

在 Node.js 社区中,有许多流行的 ORM(对象关系映射)框架,可以帮助你轻松地与数据库进行交互。以下是一些最常用的 Node.js ORM 框架:

1. Sequelize

Sequelize 是一个基于 Promise 的 Node.js ORM,用于与 SQL 数据库(如 MySQL、PostgreSQL、SQLite 和 MSSQL)交互。

特点

支持多种数据库强大的关联关系(一对一、一对多、多对多)灵活的查询接口迁移和种子数据支持

示例代码

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

class User extends Model {}
User.init({
  username: DataTypes.STRING,
  birthday: DataTypes.DATE,
}, { sequelize, modelName: 'user' });

(async () => {
  await sequelize.sync();
  const user = await User.create({ username: 'john_doe', birthday: new Date(1980, 6, 20) });
  console.log(user.toJSON());
})();
2. TypeORM

TypeORM 是另一个功能强大的 ORM 框架,支持 TypeScript 和 JavaScript,适用于 MySQL、MariaDB、PostgreSQL、SQLite 和其它多种数据库。

特点

支持 TypeScript出色的支持装饰器的语法支持多种数据库数据迁移和 CLI 支持

示例代码

import { Entity, PrimaryGeneratedColumn, Column, createConnection } from 'typeorm';

@Entity()
class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  username: string;

  @Column()
  birthday: Date;
}

createConnection({
  type: "sqlite",
  database: ":memory:",
  entities: [User],
  synchronize: true,
}).then(async connection => {
  const user = new User();
  user.username = "john_doe";
  user.birthday = new Date(1980, 6, 20);
  await connection.manager.save(user);
  console.log("User has been saved.");
}).catch(error => console.log(error));
3. Objection.js

Objection.js 是一个基于 SQL 查询生成器 Knex.js 的 ORM 框架。它强调 JavaScript 的灵活性和简单性,同时提供强大的查询功能。

特点

基于 Knex.js高度灵活的查询接口支持复杂的关联关系和根据关系进行查询内置事务管理

示例代码

const { Model } = require('objection');
const Knex = require('knex');

const knex = Knex({
  client: 'sqlite3',
  useNullAsDefault: true,
  connection: {
    filename: ':memory:'
  }
});

Model.knex(knex);

class User extends Model {
  static get tableName() {
    return 'users';
  }

  static get jsonSchema() {
    return {
      type: 'object',
      required: ['username'],
      properties: {
        id: { type: 'integer' },
        username: { type: 'string' },
        birthday: { type: 'string', format: 'date' },
      },
    };
  }
}

(async () => {
  await knex.schema.createTable('users', table => {
    table.increments('id').primary();
    table.string('username');
    table.date('birthday');
  });

  const user = await User.query().insert({ username: 'john_doe', birthday: new Date(1980, 6, 20) });
  console.log(user);
})();
4. Mongoose

尽管 Mongoose 不是传统意义上的 ORM,而是一个 ODM(对象文档映射),但对于 MongoDB 的开发者来说它是一个非常重要的库。

特点

专为 MongoDB 设计强大的数据验证和中间件支持支持插件机制高度简化的查询接口

示例代码

const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test', {useNewUrlParser: true, useUnifiedTopology: true});

const userSchema = new mongoose.Schema({
  username: String,
  birthday: Date,
});

const User = mongoose.model('User', userSchema);

const user = new User({ username: 'john_doe', birthday: new Date(1980, 6, 20) });
user.save().then(() => console.log('User saved.'));

以上这些框架各有特色,适合不同的开发需求。选择哪一个取决于你的项目需求、团队的技术栈和你对数据库的特定要求。

网友回复

我知道答案,我要回答