如何在Express中编写一个函数,可以在调用API时返回JSON,但也可以在没有Axios / Fetch的情况下在内部调用?

时间:2018-03-21 13:18:59

标签: node.js express

甚至不确定描述它的最佳方式,但基本上我在Express Controller中有一个函数,在/ api / lookupJobName中可以获取查询参数Q,这是一个数字,然后做一些后台工作(连接到Salesforce,查找工作号,获取它的实际名称)并返回一个像这样的json对象:

oppName = { name: "whateverCameBack" }
res.json(oppName)

非常简单,我以这种方式创建它,因为当它们在表单中输入数字时,它会从某个客户端JS调用。

现在我在项目中更进一步,我需要再次从工作号码中快速获取一个工作名称,但它是所有服务器端的。我不认为重写基本上相同的代码是有意义的,或者使用Axios来根据我自己的API调用该函数(它的额外流量,并且变得有点混乱需要代理),但我不能直接调用模块,因为它会抛出错误,因为我使用res.json发回数据。

我可以重复使用API​​中的代码,还是需要为我的特定目的编写一份代码?

2 个答案:

答案 0 :(得分:1)

您可以做的是编写一个模块,将核心功能导出为一个简单的功能。该模块又可以通过

调用
  1. your express api
  2. 你制作的cli工具(例如)
  3. 所以你的api和cli只是实际功能的薄层,不应该对cli或express有任何了解。

答案 1 :(得分:0)

如果我理解正确,那么你可以使用一个模块!这假设您的二次使用是在同一台服务器上。如果不是,那么你需要做别的事情。



// fn.js
module.exports = function doStuff(jobId) {
  const whateverCameBack = doSomething(jobId);
  return { name: whateverCameBack }
}

// app.js
var doStuff = require('./fn');
app.get('api/jobs/:id', function (req, res, next) {
  doStuff(req.params.id)
    .then(x => res.json(x)) // assuming it's async
    .then(next);
});

// somewhere else in server
var doStuff = require('./fn');
doStuff(jobId).then(oppName => // whatever);