gpt4 book ai didi

javascript - 使用 mongoose 的 node.js 的存储库模式

转载 作者:搜寻专家 更新时间:2023-10-31 22:54:18 26 4
gpt4 key购买 nike

我是 node.js 的新手,有 .net 背景。我想使用我在 c#.net 中使用的一些设计模式。然而,由于 c# 和 JavaScript 之间面向对象的性质不同,我遇到了一些麻烦。

特别是,我想实现存储库模式,但无法找到很多使用 node 执行此操作的示例。 JavaScript 和 mongoose 的设置方式让我很难全神贯注于此。

我引用了以下网址作为示例 https://github.com/iainjmitchell/mongorepositiory ,我可能是错的,但我看不出这个例子允许你传递回调,这将允许你的代码处理在进行数据库调用后可能出现的任何错误,而不是通常使用 mongoose 的方式。

最佳答案

我将解释 CRUD 操作的两个功能,即创建和读取,您将有休息的想法。我们将有以下层:

  • 控制者
  • 服务
  • 知识库

让我们首先使用 Mongoose 模式设置我们的模型。这是在 test.model.js 里面。

var mongoose = require("mongoose");
var Schema = mongoose.Schema;

var userSchema = new mongoose.Schema({
username: String,
password: String, //hash created from password
created_at: { type: Date, default: Date.now }
});

module.exports = mongoose.model("User", userSchema);

我不会解释 Controller 将如何请求服务层来发布或接收数据。它只是从服务层调用一个方法。所以在服务层内部,为了举例说明 test.service.js。我们将请求如下所示的存储库层。提供存储库和模型的路径作为文件夹结构。

const repository = require("../../models/repository");
var mongoose = require("mongoose");
var User = mongoose.model("User");

function createTestData(user1) {
return new Promise(function(resolve, reject) {
let user = new User(user1);// user1 is a object to be saved
repository
.create(user)
.then(data => {
resolve({
data: data
});
})
.catch(err => {
reject(err);
});
});
}

function listTestData() {
let params = {
limit: 10
};
return new Promise(function(resolve, reject) {
repository
.list(User, params)
.then(data => resolve(data))
.catch(err => reject(err));
});
}

现在我们将创建一个存储库,以便所有其他服务都可以调用此存储库以实现 CRUD 功能。这将有助于减少样板代码。

function create(Model) {
return new Promise((resolve, reject) => {
Model.save(function(err, user) {
if (err) {
reject(err);
}
resolve(user);
});
});
}

function list(Model, queryParams) {
return new Promise((resolve, reject) => {
Model.find({})
.limit(parseInt(queryParams.limit))
.exec(function(err, data) {
if (err) reject(err);
resolve(data);
});
});
}

就是这样。我试图尽可能简单地解释。您可能需要配置其他设置,例如连接到数据库。但是,如果您可以完成这项工作,则可以向存储库添加其他功能。

关于javascript - 使用 mongoose 的 node.js 的存储库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39462322/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com