我正在為一些白名單開發一個快速 js 服務器。我需要創建兩個白名單,但我不想只為它們創建兩個檔案。
var whitelistOneRouter = require('./routes/whitelist')
var whitelistTwoRouter = require('./routes/whitelist')
app.use("/whitelists/whitelistOneRouter", whitelistOneRouter)
app.use("/whitelists/whitelistTwoRouter", whitelistTwoRouter)
白名單.js
var router = express.Router();
var Merkle = require('../modules/merkle')
var merkleOne = new Merkle([])
router.get('/', function (req, res, next) {
var address = req.body.address
var proof = merkleOne.getProof(address)
res.send(proof)
})
router.get('/root', function (req, res, next) {
res.send(merkleOne.getRoot())
})
router.post('/new', function (req, res, next) {
var whitelist = req.body.whitelist
merkleOne.setNewWhitelist(whitelist)
res.send(merkleOne.getRoot())
})
module.exports = router;
當我嘗試與一個端點互動時,它會改變另一個端點,反之亦然。有誰知道更好的方法來做到這一點?我不想制作另一個相同代碼的檔案。
uj5u.com熱心網友回復:
好的,我猜你想要一個單獨的Merkle類實體。
模塊被快取,因此它們只運行一次自己的初始化。因此,按照您之前的方式,您有一個路由器和一個 Merkle 物件實體。要擁有單獨的實體,您將代碼移動到一個函式中,以便可以根據需要多次呼叫它,并且每次都會創建一個新的 Merkle 物件。這是一種方法:
const Merkle = require('../modules/merkle');
const express = require('express');
module.exports = function() {
const router = express.Router();
const merkleOne = new Merkle([])
router.get('/', function (req, res, next) {
var address = req.body.address
var proof = merkleOne.getProof(address)
res.send(proof)
})
router.get('/root', function (req, res, next) {
res.send(merkleOne.getRoot())
})
router.post('/new', function (req, res, next) {
var whitelist = req.body.whitelist
merkleOne.setNewWhitelist(whitelist)
res.send(merkleOne.getRoot())
})
return router;
}
然后,像這樣使用它:
const whiteListFn = require('./routes/whitelist');
app.use("/whitelists/whitelistOneRouter", whiteListFn());
app.use("/whitelists/whitelistTwoRouter", whiteListFn());
uj5u.com熱心網友回復:
Node.js 中的模塊本質上是單例。
無論您需要./routes/whitelist決議到的路徑,它都會匯出相同的路徑,merkleOne并且router它們在模塊最外層范圍中定義。
如果要共享代碼,那么匯出工廠函式是實作單獨實體的一種方法
function newMerkleRouter(){
var merkleOne = new Merkle([])
var router = express.Router();
router.get('/', function (req, res, next) {
var address = req.body.address
var proof = merkleOne.getProof(address)
res.send(proof)
})
router.get('/root', function (req, res, next) {
res.send(merkleOne.getRoot())
})
router.post('/new', function (req, res, next) {
var whitelist = req.body.whitelist
merkleOne.setNewWhitelist(whitelist)
res.send(merkleOne.getRoot())
})
return router
}
app.use("/whitelists/whitelistOneRouter", newMerkleRouter())
app.use("/whitelists/whitelistTwoRouter", newMerkleRouter())
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/422738.html
標籤:
