甚至不确定描述它的最佳方式,但基本上我在Express Controller中有一个函数,在/ api / lookupJobName中可以获取查询参数Q,这是一个数字,然后做一些后台工作(连接到Salesforce,查找工作号,获取它的实际名称)并返回一个像这样的json对象:
oppName = { name: "whateverCameBack" }
res.json(oppName)
非常简单,我以这种方式创建它,因为当它们在表单中输入数字时,它会从某个客户端JS调用。
现在我在项目中更进一步,我需要再次从工作号码中快速获取一个工作名称,但它是所有服务器端的。我不认为重写基本上相同的代码是有意义的,或者使用Axios来根据我自己的API调用该函数(它的额外流量,并且变得有点混乱需要代理),但我不能直接调用模块,因为它会抛出错误,因为我使用res.json发回数据。
我可以重复使用API中的代码,还是需要为我的特定目的编写一份代码?
答案 0 :(得分:1)
您可以做的是编写一个模块,将核心功能导出为一个简单的功能。该模块又可以通过
调用所以你的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);