如何在 Express 中编写一个函数,当作为 API 调用时可以返回 JSON,也可以在没有 Axios/Fetch



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

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

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

现在我在项目中走得更远,我需要再次从作业编号中快速获取作业名称,但这都是服务器端的。我认为重写本质上相同的代码或使用 Axios 针对我自己的 API 调用函数是没有意义的(这是额外的流量,并且需要代理有点混乱),但我不能直接调用模块,因为它抛出错误,因为我使用 res.json 发回数据。

我可以重用 API 中的代码,还是需要为我的特定目的编写它的副本?

您可以做的是编写一个模块,将核心功能导出为简单函数。这个模块反过来可以由

  1. 您的快递原料药
  2. 您制作的 CLI 工具(例如)

所以你的 api 和 cli 只是围绕实际功能的薄层,它们不应该知道任何关于 cli 或 express 的信息。

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

// 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);

最新更新