如何将以下api的返回结果调用到另一个js文件中的其他函数?我知道这个问题是重复的,但不会返回结果。因此,在标记为重复项之前,请三思而后行。
router.post("/:projectId/events/enriched", checkAuth, (req, res, next) => {
const enrichedEvent = new EnrichedEvent({
_id: mongoose.Types.ObjectId(),
name: req.body.name,
projectId: req.params.projectId, //taking from url
description: req.body.description,
regex: req.body.regex ,
kafkaOptions: req.body.kafkaOptions
});
return enrichedEvent.save() // need all the saved data in another file
.then(result => {
console.log(result);
res.status(201).json({
message: "Event stored",
createdEvent: {
_id: result._id,
projectId: result.projectId,
name: result.name,
description: result.description,
kafka: result.kafkaOptions,
filters: result.filters,
regex: result.regex,
}
});
return Project.findOneAndUpdate({
_id: result.projectId
}, {
$push: {
enrichedEvents: result._id
}
})
})
.catch(err => {
console.log(err);
res.status(500).json({
error: err
});
});
});
答案 0 :(得分:1)
如果我正确理解了您的问题,您想从另一个JS文件中获得return enrichedEvent.save()…
的结果,而不必调用HTTP API?
如果是这样,我建议您从API中提取逻辑。您可以执行以下操作:
// do-something.js
module.exports = function doSomething(projectId, options, onSave) {
const enrichedEvent = new EnrichedEvent({
_id: mongoose.Types.ObjectId(),
name: options.name,
projectId: projectId,
description: options.description,
regex: options.regex,
kafkaOptions: options.kafkaOptions
});
return enrichedEvent
.save()
.then(result => {
onSave(result);
return Project.findOneAndUpdate(
{
_id: result.projectId
},
{
$push: {
enrichedEvents: result._id
}
}
);
});
}
您可以通过自己的API进行调用:
const doSomething = require('./do-something');
router.post("/:projectId/events/enriched", checkAuth, (req, res, next) => {
return doSomething(req.params.projectId, req.body, (result) => {
console.log(result);
res.status(201).json({
message: "Event stored",
createdEvent: {
_id: result._id,
projectId: result.projectId,
name: result.name,
description: result.description,
kafka: result.kafkaOptions,
filters: result.filters,
regex: result.regex
}
});
})
.catch(err => {
console.log(err);
res.status(500).json({
error: err
});
});
});
您可以从任何其他JS文件中调用doSomething
,以提供不同的上下文:
const doSomething = require('path/to/do-something');
请注意,我对功能签名和内容做了一些快速的设计决策,但是由您决定要在何处分离事物并为其命名。主要思想是通过摆脱特定于API的所有内容来提取函数。