我已經設定了多個 webhook 端點,它們遵循 Node.js 中的類似結構:1) 將 JSON 請求字串化,2) 對 R 中的字串化請求做一些事情。
因此,這會導致大量重復代碼,我試圖通過創建一個函式來保持 DRY,在該函式中我指定了實際發生變化的引數。這是一個例子。
首先,腳本的頂部:
require("dotenv").config();
const express = require("express");
const app = express();
const port = 3000;
app.use(express.json());
然后,我想重寫為主函式 ( WH) 的部分,其中下面的所有內容都大寫<并>成為引數。
app.post(<ENDPOINT>, foobar);
function foobar(req, res) {
var spawn = require("child_process").spawn;
let body = JSON.stringify(req.body);
var R_shell = spawn("/usr/local/bin/Rscript", [<PATH_TO_SCRIPT>, body]);
res.end("Processing completed");
}
app.get(<ENDPOINT>, (req, res) => res.send(`<html><body><h1>All working!</h1></body></html>
`));
因此,有兩個端點,我最終會得到:
require("dotenv").config();
const express = require("express");
const app = express();
const port = 3000;
app.use(express.json());
WH(endpoint="foo", script_path="baz")
WH(endpoint="lorem", script_path="dolor")
PS 抱歉,如果從 Node.js 的角度來看,這是一個表述不當的問題——這是我第一次使用 Node.js 進行開發。
uj5u.com熱心網友回復:
如果我正確理解你的問題,你可以做的是這樣的:
首先,您需要創建一個函式,該函式回傳具有指定路由的路由器(您可以在不同的檔案中創建此函式以使代碼更清晰)。
const {Router} = require('express')
function WH(endpoint, scriptPath) {
const router = Router()
function fn(req, res) {
var spawn = require("child_process").spawn;
let body = JSON.stringify(req.body);
var R_shell = spawn("/usr/local/bin/Rscript", [scriptPath, body]);
res.end("Processing completed");
}
router.post(endpoint, fn);
router.get(endpoint, (req, res) => res.send(`<html><body><h1>All working!</h1></body></html>`));
return router
}
最后你應該像這樣使用它:
require("dotenv").config();
const express = require("express");
const app = express();
const port = 3000;
app.use(express.json());
app.use(WH("/foo", "./baz"))
app.use(WH("/lorem", "./dolor"))
我不明白您為什么要更改函式名稱,它不會影響任何事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/400236.html
標籤:节点.js
上一篇:Node.js-MaxListenersExceededWarning-撰寫Node.jsCLI應用程式時使用readline模塊
下一篇:如何驗證兩個joi架構物件
