从服务器控制器访问 MEANjs 中的 API 个端点
Access API endpoints in MEANjs from server controller
所以我遇到了这个问题,我正在处理我的应用程序中的 'following' 功能。重要的是,我有两个模型:
Follows
和 Notifications
当我点击前端的关注按钮时,我 运行 从 follow.client.controller.js
函数 POST 到 API 端点 /api/follows
对应于 follow.server.controller.js
和然后对 Follows
模型执行更新操作 - 简单。 AFAIK 这就是它的工作原理(它对我有用)。
但在 follows.server.controller.js
中我还想调用 post 到 API 端点 /api/notifications
对应于 notifications.server.controller.js
但我找不到合适的这样做的方法。任何帮助将不胜感激。
我不希望前端再次调用来添加通知,因为它应该是自动的 = 如果用户开始关注某人,信息会同时保存在两个模型中。
您可以在服务器路由中添加中间件。
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 方法中进行少量数据库调用,并通过承诺加入此调用。示例:
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 < 10000) {
throw new Error('Too few people!!!');
} else {
throw new Error('Still need more people!!!');
}
}).then(null, function (err) {
assert.ok(err instanceof Error);
});
所以我遇到了这个问题,我正在处理我的应用程序中的 'following' 功能。重要的是,我有两个模型:
Follows
和 Notifications
当我点击前端的关注按钮时,我 运行 从 follow.client.controller.js
函数 POST 到 API 端点 /api/follows
对应于 follow.server.controller.js
和然后对 Follows
模型执行更新操作 - 简单。 AFAIK 这就是它的工作原理(它对我有用)。
但在 follows.server.controller.js
中我还想调用 post 到 API 端点 /api/notifications
对应于 notifications.server.controller.js
但我找不到合适的这样做的方法。任何帮助将不胜感激。
我不希望前端再次调用来添加通知,因为它应该是自动的 = 如果用户开始关注某人,信息会同时保存在两个模型中。
您可以在服务器路由中添加中间件。
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 方法中进行少量数据库调用,并通过承诺加入此调用。示例:
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 < 10000) {
throw new Error('Too few people!!!');
} else {
throw new Error('Still need more people!!!');
}
}).then(null, function (err) {
assert.ok(err instanceof Error);
});