экспресс-ошибка внутреннего сервера js 500 без ошибок в коде

#javascript #node.js #express #blockchain

Вопрос:

мои экспресс-маршруты js выдают мне ошибку 500 внутренняя ошибка сервера, и я попытался ввести переменные в журнал консоли, но ничего не появилось

вот экспресс-маршруты:

 submitStar() {
        this.app.post("/submitstar", async (req, res) => {
            if(req.body.address amp;amp; req.body.message amp;amp; req.body.signature amp;amp; req.body.star) {
                const address = req.body.address;
                const message = req.body.message;
                const signature = req.body.signature;
                const star = req.body.star;
                try {
                    let block = await this.blockchain.submitStar(address, message, signature, star);
                    if(block){
                        return res.status(200).json(block);
                    } else {
                        return res.status(500).send("An error happened!");
                    }
                } catch (error) {
                    return res.status(500).send(error);
                }
            } else {
                return res.status(500).send("Check the Body Parameter!");
            }
        });
    }
 

Я продолжаю получать сообщение «Проверьте параметр тела!» в Postman, в то время как сообщение на самом деле правильное

введите описание изображения здесь

в app.js:

 const express = require("express");
const morgan = require("morgan");
const bodyParser = require("body-parser");

   
/**
 * Require the Blockchain class. This allow us to have only one instance of the class.
 */
const BlockChain = require('./src/blockchain.js');

class ApplicationServer {

    constructor() {
        //Express application object
        this.app = express();
        //Blockchain class object
        this.blockchain = new BlockChain.Blockchain();
        //Method that initialized the express framework.
        this.initExpress();
        //Method that initialized middleware modules
        this.initExpressMiddleWare();
        //Method that initialized the controllers where you defined the endpoints
        this.initControllers();
        //Method that run the express application.
        this.start();
    }

    initExpress() {
        this.app.set("port", 8000);
    }

    initExpressMiddleWare() {
        this.app.use(morgan("dev"));
        this.app.use(bodyParser.urlencoded({extended:true}));
        this.app.use(bodyParser.json());
    }

    initControllers() {
        require("./BlockchainController.js")(this.app, this.blockchain);
    }

    start() {
        let self = this;
        this.app.listen(this.app.get("port"), () => {
            console.log(`Server Listening for port: ${self.app.get("port")}`);
        });
    }

}

new ApplicationServer();
 

что может быть не так с сервером?

Комментарии:

1. Содержит ли req.body упомянутые вами ключи? Если это не так, вам, возможно, придется использовать анализатор тела для преобразования в объект json.

2. Я попытался console.log(req.body), но в терминале ничего не появилось

3. Пожалуйста, проверьте app.js файл для пакета анализатора тела

4. Замените переменную маршрутизатора на приведенную выше. Это может быть похоже на const router = express. Маршрутизатор(); Перейдите по этой ссылке github.com/sujithmp/nodejs-auth-system-back-end-1/blob/master/…

Ответ №1:

Внес некоторые изменения в код.

 const express = require("express");
const morgan = require("morgan");
const bodyParser = require("body-parser");


/**
  * Require the Blockchain class. This allow us to have only one instance of 
  * the class.
*/
const BlockChain = require('./src/blockchain.js');

class ApplicationServer {

   constructor() {
    //Express application object
    this.app = express();
    //Blockchain class object
    this.blockchain = new BlockChain.Blockchain();
    //Method that initialized the express framework.
    this.initExpress();
    //Method that initialized middleware modules
    this.initExpressMiddleWare();
    //Method that initialized the controllers where you defined the endpoints
    this.initControllers();
    //Method that run the express application.
    this.start();
   }

   initExpress() {
     this.app.set("port", 8000);
   }

   initExpressMiddleWare() {
    this.app.use(morgan("dev"));
    this.router = express.Router();
    this.router.use(bodyParser.urlencoded({extended:true}));
    this.router.use(bodyParser.json());
   }

   initControllers() {
      require("./BlockchainController.js")(this.app, this.blockchain);
      // console.log(this.app.route(),"this.app")
   }

   start() {
    let self = this;
    
    this.router.post('/',(req,res) => {
        console.log(req.body.id,"body");
        res.status(200).send('Hello');
    })
    this.app.use(this.router);
    this.app.listen(this.app.get("port"), (req,res) => {
        console.log(`Server Listening for port: ${self.app.get("port")}`);
    });
   }

 }

 new ApplicationServer();
 

Комментарии:

1. это дает мне «маршрутизатор», который не определен

2. Перейдите по этой ссылке github.com/sujithmp/nodejs-auth-system-back-end-1/blob/master/…

3. Я реализовал это, и это не помогло, а также есть другие маршруты, которые тоже работали без этого

4. Где проходит ваш маршрут? Вам нужно использовать анализатор тела с маршрутизатором

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