Выполнение запроса от «express router» не выполняет свою работу, как в «express app» - PullRequest
0 голосов
/ 07 апреля 2020

Я пишу блокчейн в node.js. Я начал с express app.

const express = require("express");
const app = express();

Я написал все маршруты с "app". все обработчики маршрута находятся на одной странице и с текущей структурой «приложение» работает, ошибки нет. Поскольку это длинная страница, я хотел разделить маршруты с express роутером, но маршруты, которые делают запрос API, не работают должным образом. Они не выдают никакой ошибки, как бы то ни было, они не делают то, что должны. Например, я выделил этот код следующим образом:

const router = require("express").Router();
const Blockchain = require("../blockchain");
const bitcoin = new Blockchain();
const rp = require("request-promise");
const { v4: uuidv4 } = require("uuid");
const currentNodeUrl = process.argv[3];

const nodeAddress = uuidv4().split("-").join("");

router.get("/", function (req, res) {
  const lastBlock = bitcoin.getLastBlock();
  const previousBlockHash = lastBlock["hash"];
  const currentBlockData = {
    transactions: bitcoin.pendingTransactions,
    index: lastBlock["index"] + 1,
  };
  const nonce = bitcoin.proofOfWork(previousBlockHash, currentBlockData);
  const blockHash = bitcoin.hashBlock(
    previousBlockHash,
    currentBlockData,
    nonce
  );
  const newBlock = bitcoin.createNewBlock(nonce, previousBlockHash, blockHash);

  const requestPromises = [];
  bitcoin.networkNodes.forEach((networkNodeUrl) => {
    const requestOptions = {
      uri: networkNodeUrl + "/receive-new-block",
      method: "POST",
      body: { newBlock: newBlock },
      json: true,
    };

    requestPromises.push(rp(requestOptions));
  });

  Promise.all(requestPromises)
    .then((data) => {
      const requestOptions = {
        uri: bitcoin.currentNodeUrl + "/transaction/broadcast",
        method: "POST",
        body: {
          amount: 12.5,
          sender: "00",
          recipient: nodeAddress,
        },
        json: true,
      };

      return rp(requestOptions);
    })
    .then((data) => {
      res.json({
        note: "New block mined & broadcast successfully",
        block: newBlock,
      });
    })
    .catch((e) => console.log(e));
});

module.exports = router;

и в приложении. js

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use("/mine", require("./routes/mine"));

При первом запросе предполагается сделать запрос POST для / Маршрут request-new-block и этот маршрут должны создать блок и добавить новый блок в цепочку, но он этого не делает, и я не получаю никакой ошибки.

Другие маршруты, которые не отправляют ни одного почтового запроса, работают правильно с маршрутизатором.

вот / получить-новый-блок в приложении. js

app.post("/receive-new-block", (req, res) => {
  const newBlock = req.body.newBlock;
  //first we need to check if the block is legitimite
  const lastBlock = bitcoin.getLastBlock();
  const correctHash = lastBlock.hash === newBlock.previousBlockHash;
  const correctIndex = lastBlock["index"] + 1 === newBlock["index"];
  if (correctHash && correctIndex) {
    bitcoin.chain.push(newBlock);
    bitcoin.pendingTransactions = [];
    res.json({ note: "new block received and accepted", newBlock });
  } else {
    res.json({ note: "new block rejected", newBlock });
  }
});

вот репо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...