从服务器控制器访问 MEANjs 中的 API 端点

Access API endpoints in MEANjs from server controller

本文关键字:中的 API 端点 MEANjs 访问 服务器 控制器      更新时间:2023-09-26

所以我有这个问题,我正在我的应用程序中开发"关注"功能。重要的是,我有两个模型:

FollowsNotifications

当我在前端点击跟随按钮时,我运行从follow.client.controller.js哪些 POST 到 API 端点的功能/api/follows对应于follow.server.controller.js,然后在Follows模型上执行更新操作 - 很容易。AFAIK 这就是它的工作原理(它对我有用)。

但是在follows.server.controller.js我还想在对应于notifications.server.controller.js/api/notifications 处调用 post 到 API 端点,但我找不到合适的方法来做到这一点。任何帮助将不胜感激。

我不希望来自前端的另一个呼叫来添加通知,因为它应该是自动的 = 如果用户开始关注某人,信息将同时保存在两个模型中。

您可以在服务器路由中添加中间件。

app.route('/api/follows')
    .post(notification.firstFunction, follows.secondFunction);

现在在您的控制器中添加 2 种方法。首先调用 db 并将一些结果的数据添加到请求对象中,该对象将被转发到第二个方法。

exports.firstFunction= function(req, res, next) {
    Notification.doSometing({
        }).exec(function(err, result) {
            if (err) return next(err);
            req.yourValueToPassForward = result
            next(); // <-- important
        });
};
exports.secondFunction= function(req, res) {
    //...
};

或者,您可以在一个 api 方法中进行少量数据库调用,并用 promise 加入此调用。例:

var promise = Meetups.find({ tags: 'javascript' }).select('_id').exec();
promise.then(function (meetups) {
  var ids = meetups.map(function (m) {
    return m._id;
  });
  return People.find({ meetups: { $in: ids }).exec();
}).then(function (people) {
  if (people.length &lt; 10000) {
    throw new Error('Too few people!!!');
  } else {
    throw new Error('Still need more people!!!');
  }
}).then(null, function (err) {
  assert.ok(err instanceof Error);
});