在 Loopback 上,如何以编程方式向发布的内容添加数据,例如 UserID 和 Date?
On Loopback, how to programmatically add data to the posted content, such as UserID and Date?
假设您创建了一个允许注册用户通过环回 API 将内容 POST 发送到数据库 (MySQL) 的应用程序。现在,您将如何拦截发布的内容以填写一些字段,例如:
- 基于访问令牌的 UserID?
- 当前 Date/Time?
您可以使用 remote hooks
拦截来自客户端的数据
例如:
Model.CustomCreate = function(data, cb){
Mode.create(data, cb);
};
Model.beforeRemote('CustomCreate', function(ctx, instance, next){
ctx.args.data.changeDate = new Date();
var token = ctx.req.headers.token; // or however you set that
app.models.User.findByToken(token, function(err, account){
if(err) return next(err);
ctx.args.data.userId = account.id;
next();
});
});
我在上面考虑过在请求中以您的方式保存的令牌 header。
使用远程挂钩是正确的方法。这是一个远程挂钩的示例,它将在保存记录之前添加创建日期、修改日期和用户 ID。只有当它是新记录时才会设置创建日期和 ownerId,并在更新调用时设置修改日期。
common/models/model.js
'use strict';
module.exports = function(Model) {
// Set dates and userId before saving the model
Model.observe('before save', function setAutoData(context, next) {
if (context.instance) {
if(context.isNewInstance) {
context.instance.created = Date.now();
context.instance.ownerId = context.options.accessToken.userId;
}
context.instance.modified = Date.now();
}
next();
});
};
假设您创建了一个允许注册用户通过环回 API 将内容 POST 发送到数据库 (MySQL) 的应用程序。现在,您将如何拦截发布的内容以填写一些字段,例如: - 基于访问令牌的 UserID? - 当前 Date/Time?
您可以使用 remote hooks
拦截来自客户端的数据例如:
Model.CustomCreate = function(data, cb){
Mode.create(data, cb);
};
Model.beforeRemote('CustomCreate', function(ctx, instance, next){
ctx.args.data.changeDate = new Date();
var token = ctx.req.headers.token; // or however you set that
app.models.User.findByToken(token, function(err, account){
if(err) return next(err);
ctx.args.data.userId = account.id;
next();
});
});
我在上面考虑过在请求中以您的方式保存的令牌 header。
使用远程挂钩是正确的方法。这是一个远程挂钩的示例,它将在保存记录之前添加创建日期、修改日期和用户 ID。只有当它是新记录时才会设置创建日期和 ownerId,并在更新调用时设置修改日期。
common/models/model.js
'use strict';
module.exports = function(Model) {
// Set dates and userId before saving the model
Model.observe('before save', function setAutoData(context, next) {
if (context.instance) {
if(context.isNewInstance) {
context.instance.created = Date.now();
context.instance.ownerId = context.options.accessToken.userId;
}
context.instance.modified = Date.now();
}
next();
});
};