gpt4 book ai didi

javascript - 聊天应用程序 Tut : purpose of populate()?

转载 作者:太空宇宙 更新时间:2023-11-04 15:43:04 24 4
gpt4 key购买 nike

我正在学习FeathersJS到目前为止,这似乎是我所希望的一切Meteor曾是。继续努力!

现在我正在处理 Chat App tutorial但遇到了一些困惑。我不太明白 this section 发生了什么本教程的部分内容,特别是 messages.hooks.js 中的 populate Hook :

'use strict';

const { authenticate } = require('feathers-authentication').hooks;
const { populate } = require('feathers-hooks-common');
const processMessage = require('../../hooks/process-message');

module.exports = {
before: {
all: [ authenticate('jwt') ],
find: [],
get: [],
create: [ processMessage() ],
update: [ processMessage() ],
patch: [ processMessage() ],
remove: []
},

after: {
all: [
// What's the purpose of this ?
populate({
schema: {
include: [{
service: 'users',
nameAs: 'user',
parentField: 'userId',
childField: '_id'
}]
}
})
],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: []
},

error: {
all: [],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: []
}
};

这是process-message.js:

'use strict';

// Use this hook to manipulate incoming or outgoing data.
// For more information on hooks see: http://docs.feathersjs.com/api/hooks.html

module.exports = function() {
return function(hook) {
// The authenticated user
const user = hook.params.user;
// The actual message text
const text = hook.data.text
// Messages can't be longer than 400 characters
.substring(0, 400)
// Do some basic HTML escaping
.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');

// Override the original data
hook.data = {
text,
// Set the user id
userId: user._id,
// Add the current time via `getTime`
createdAt: new Date().getTime()
};

// Hooks can either return nothing or a promise
// that resolves with the `hook` object for asynchronous operations
return Promise.resolve(hook);
};
};

据我了解,在消息服务上执行 createupdatepatch 之前,数据会发送到 processMessage() 清理数据并向其中添加用户 ID。

问题:

  1. processMessage()之后,数据是否立即写入数据库?
  2. 数据写入数据库后,会执行 after 钩子(Hook),对吗?
  3. 那么 populate Hook 的目的是什么?

谢谢:)

最佳答案

为了更好地了解羽毛上的钩子(Hook)和其他很酷的东西。做一些基础的日志还是不错的。无论如何,这就是流程。

CLIENT -> Before ALL Hook -> OTHER BEFORE(create, update, ... ) -> Database -> ERROR Hook (注意:仅当前面的步骤有错误时) -> AFTER ALL Hook -> OTHER AFTER(创建、更新...) -> 过滤器 -> 客户端

至于 populate Hook ,它与数据库中的 populate 具有相同的目的。羽毛会为您完成此操作,而不是您执行填充查询。

根据您的示例,您希望在您的架构中具有类似的内容;

{
...,
userId : [{ type: <theType>, ref: 'users' }]
}

您想要添加另一个名为 user 的字段,然后使用 users 服务中的数据填充该字段,并将其 _id用户ID

关于javascript - 聊天应用程序 Tut : purpose of populate()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43725099/

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