Hapi 和 Seeli-Mongoose 实现 MongoDB 数据库操作

Hapi 和 Seeli-Mongoose 实现 MongoDB 数据库操作

在前端开发中,涉及到数据库操作时,我们通常使用 MongoDB 数据库。而在 Node.js 环境下,使用 Hapi 和 Seeli-Mongoose 可以非常高效地实现 MongoDB 数据库操作。

Hapi 是 Node.js 平台上的一个轻量级框架,可以用于构建各种 Web 应用程序。而 Seeli-Mongoose 是 Hapi 框架中的一个插件,提供了 MongoDB 数据库操作的支持。

下面我们来学习如何使用 Hapi 和 Seeli-Mongoose 实现 MongoDB 数据库操作。

使用前需要安装依赖

在开始之前,我们需要先安装这些依赖:hapi、mongoose 和 hapi-plugin-mongoose。

  • Hapi:Hapi 框架
  • Mongoose: MongoDB 的 Node.js 驱动程序
  • Hapi-plugin-mongoose:在 Hapi 中使用 Mongoose 的插件

可以使用 npm 在命令行中安装这些依赖:

连接数据库

在使用 Mongoose 连接 MongoDB 之前,需要在 code 中配置连接参数,比如数据库的 IP 地址、端口、数据库名、用户名等信息。

在 Hapi 框架中,我们可以在初始化的时候连接数据库,例如:

const mongoose = require('mongoose');
const Hapi = require('@hapi/hapi');

const server = new Hapi.Server({
  port: 3000,
  host: 'localhost'
});

const init = async () => {
  await mongoose.connect('mongodb://localhost:27017/mydb', {
    useUnifiedTopology: true,
    useNewUrlParser: true
  });

  console.log('MongoDB connected.');

  // ...接下来的操作
};

init();

其中,mongodb://localhost:27017/mydb 中的 localhost 表示 MongoDB 的服务 IP 地址,27017 表示 MongoDB 的服务端口,mydb 表示数据库名。

定义模型

在 MongoDB 中,会通过模型来访问和操作数据集合。在 Mongoose 中,一个模型对应一个数据集合。

我们可以通过如下方式来创建一个模型:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const UserSchema = new Schema({
  name: String,
  email: String,
  password: String
});

const UserModel = mongoose.model('User', UserSchema);

module.exports = UserModel;

这里我们创建了一个模型名为 UserModel,它对应的数据集合名为 users。模型包含了三个字段,分别是 nameemailpassword

使用模型进行 CRUD

创建模型之后,我们就可以使用模型来实现 CRUD(增删改查)操作。

在使用模型之前,需要将模型导入 controller 文件中:

const UserModel = require('../models/user');

其中,../models/user 表示存放模型的文件路径。

接下来我们来看具体的 CRUD 操作。

添加数据:

const createUser = async (request, reply) => {
  const data = request.payload;

  const user = await UserModel.create(data);

  return reply.response(user.toJSON()).code(201);
};

这里我们使用 UserModel.create() 函数添加数据。request.payload 表示 POST 请求提交的数据。

读取数据:

const getUsers = async (request, reply) => {
  const users = await UserModel.find().exec();

  return reply.response(users).code(200);
};

这里我们使用 UserModel.find().exec() 函数获取全部用户数据。

更新数据:

const updateUser = async (request, reply) => {
  const id = request.params.id;
  const data = request.payload;

  const user = await UserModel.findByIdAndUpdate(id, data, { new: true });

  return reply.response(user).code(200);
};

这里我们使用 UserModel.findByIdAndUpdate() 函数更新数据。request.params.id 表示请求 URL 中的参数。

删除数据:

const deleteUser = async (request, reply) => {
  const id = request.params.id;

  await UserModel.findByIdAndDelete(id);

  return reply.response().code(204);
};

这里我们使用 UserModel.findByIdAndDelete() 函数删除数据。

总结

在本文中,我们学习了如何使用 Hapi 和 Seeli-Mongoose 实现 MongoDB 数据库操作。我们首先需要通过 npm 安装依赖,然后连接数据库,定义模型,最后使用模型进行 CRUD 操作。

这里提供一个完整的示例代码:

const mongoose = require('mongoose');
const Hapi = require('@hapi/hapi');
const HapiMongoose = require('hapi-plugin-mongoose');
const UserModel = require('./models/user');

const server = new Hapi.Server({
  port: 3000,
  host: 'localhost'
});

const init = async () => {
  await server.register({
    plugin: HapiMongoose,
    options: {
      uri: 'mongodb://localhost:27017/mydb',
      mongooseOptions: {
        useUnifiedTopology: true,
        useNewUrlParser: true
      }
    }
  });

  server.route([
    {
      method: 'GET',
      path: '/users',
      handler: async (request, reply) => {
        const users = await UserModel.find().exec();

        return reply.response(users).code(200);
      }
    },
    {
      method: 'GET',
      path: '/users/{id}',
      handler: async (request, reply) => {
        const id = request.params.id;

        const user = await UserModel.findById(id).exec();

        return reply.response(user).code(200);
      }
    },
    {
      method: 'POST',
      path: '/users',
      handler: async (request, reply) => {
        const data = request.payload;

        const user = await UserModel.create(data);

        return reply.response(user.toJSON()).code(201);
      }
    },
    {
      method: 'PUT',
      path: '/users/{id}',
      handler: async (request, reply) => {
        const id = request.params.id;
        const data = request.payload;

        const user = await UserModel.findByIdAndUpdate(id, data, { new: true });

        return reply.response(user).code(200);
      }
    },
    {
      method: 'DELETE',
      path: '/users/{id}',
      handler: async (request, reply) => {
        const id = request.params.id;

        await UserModel.findByIdAndDelete(id);

        return reply.response().code(204);
      }
    }
  ]);

  await server.start();

  console.log(`Server is running at ${server.info.uri}`);
};

init();

这里我们使用了 HapiMongoose 插件来连接数据库,然后定义了 5 个路由实现了 CRUD 操作。

通过学习本文,您可以掌握使用 Hapi 和 Seeli-Mongoose 与 MongoDB 数据库进行交互的方法,为您的项目开发提供了实用的技能和工具。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a188ffadd4f0e0ff9987d9


纠错反馈