在 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();
    });    
};