gpt4 book ai didi

javascript - node.js 多个回调/回调串行执行

转载 作者:行者123 更新时间:2023-11-29 20:52:08 25 4
gpt4 key购买 nike

所以我正在尝试创建一个公开某些 RESTful API 端点的 node.js-mongoose 应用程序。这是一个高级结构:

index.js
|
models
|-- user.js
|-- keys.js
controllers
|-- user.controller.js
|-- keys.controller.js
routes
|-- user.routes.js
|-- keys.routes.js

这是我为每个单独的部分遵循的模式:

myModel.js(模型文件)

import mongoose from 'mongoose';
const Schema = mongoose.Schema;
const mySchema = new Schema({
id: { type: 'String', required: true, unique: true },
});
let MyModel = mongoose.model('MyModel', mySchema);
export default MyModel;

my.controller.js( Controller 文件)

import MyModel from '../models/myModel';
const MyController = {};

// Add a new document
MyController.addNewDocument = async (req, res) => {
try {
// validate req

// save to database
await newDocument.save((err, saved) => {
if (err) {
console.log(err);
return res.status(500).send(err);
} else {
return res.status(201).json({ document: saved });
}
});
} catch (err) {
console.error('Unexpected error in addNewDocument method');
return res.status(500).send(err);
}
};

export default MyController;

my.routes.js(路由文件)

import { Router } from 'express';
import MyController from '../controllers/my.controller';
const router = new Router();

// Add a new document
router.post('/documents', (req, res) => {
MyController.addNewDocument(req, res);
});

export default router;

所以我为 userskeys 准备了这些 CRUD 操作( Controller 和路由)。所需的行为是,每次我创建一个新用户时,都应该使用 Controller 文件公开的函数中的业务逻辑生成一组新的 key 。

问题:我如何一个接一个地执行它们?正确的模式应该是什么?

我尝试过的事情:

  1. 回调 hell
  2. 使用 res.redirect 等从 Controller 函数中调用其他端点

我探索的事物:

  1. promise
  2. 多次回调

但我仍然不确定实现上述行为的正确方式是什么。

最佳答案

Mongoose 具有保存前和保存后 Hook 。 docs here

您可以使用它们来避免回调并保持逻辑分离。

import mongoose from 'mongoose';
const Schema = mongoose.Schema;

const keySchema = new Schema({
user: { type: Schema.Types.ObjectId, ref: 'User' },
key: { type: 'String', required: true, unique: true },
});

const userSchema = new Schema({
_id: Schema.Types.ObjectId,
name: String,
});

userSchema.post('save', (newUser) => {
// generate key
new Key({
user: newUser._id,
key: '1234567890'
}).save();

});


let User = mongoose.model('User', userSchema);
let Key = mongoose.model('Key', keySchema);

关于javascript - node.js 多个回调/回调串行执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51374020/

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