‘имя пользователя: req.body.username’ имя пользователя в последней строке не определено

#node.js #mongodb

Вопрос:

Здравствуйте, я создаю систему регистрации для входа в свой проект, на самом деле я делал это во многих своих предыдущих проектах, но на этот раз я получаю ошибку, из-за которой я видел много сообщений, связанных с этим, но ни одно из них не сработало для меня.

У меня есть кое-какие проблемы по «verifySignUp.js» это

«Ошибка типа: Не удается прочитать свойство»имя пользователя «неопределенного»

на последнем «неопределенном» в строке «имя пользователя: req.body.имя пользователя»

а это мои данные почтальона.

    {
      "username":"deayhrovv",
      "email":"deayhrovv@gmail.com",
      "password":"123456",
      "roles":["user","moderater"]
   }
 

это мое server.js

 var express = require("express");
var bodyParser = require("body-parser");
var cors = require("cors");

var dbConfig = require("./app/config/db.config");
var db = require("./app/models");
var Role = db.role;
var app = express();

// routes
require('./app/routes/auth.routes')(app);
require('./app/routes/user.routes')(app);

var corsOptions = {
  origin: "http://localhost:8080"
};

db.mongoose
  .connect(`mongodb://${dbConfig.HOST}:${dbConfig.PORT}/${dbConfig.DB}`, {
    useNewUrlParser: true,
    useUnifiedTopology: true
  })
  .then(() => {
    console.log("Successfully connect to MongoDB.");
    initial();
  })
  .catch(err => {
    console.error("Connection error", err);
    process.exit();
});

function initial() {
    Role.estimatedDocumentCount((err, count) => {
      if (!err amp;amp; count === 0) {
        new Role({
          name: "user"
        }).save(err => {
          if (err) {
            console.log("error", err);
          }
  
          console.log("added 'user' to roles collection");
        });
  
        new Role({
          name: "moderator"
        }).save(err => {
          if (err) {
            console.log("error", err);
          }
  
          console.log("added 'moderator' to roles collection");
        });
  
        new Role({
          name: "admin"
        }).save(err => {
          if (err) {
            console.log("error", err);
          }
  
          console.log("added 'admin' to roles collection");
        });
      }
    });
}

app.use(cors(corsOptions));

// parse requests of content-type - application/json
app.use(bodyParser.json())

// parse requests of content-type - application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

// simple route
app.get("/", (req, res) => {
  res.json({ message: "Welcome to Canteen Food Order APIs application ."});
});

// set port, listen for requests
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
  console.log(`Server is running on url ${corsOptions.origin}.`);
}); 

Это мое промежуточное программное обеспечение

 const { verifySignUp } = require("../middlewares");
const controller = require("../controllers/auth.controller");

module.exports = function(app) {
  app.use(function(req, res, next) {
    res.header(
      "Access-Control-Allow-Headers",
      "x-access-token, Origin, Content-Type, Accept"
    );
    next();
  });

  app.post(
    "/api/auth/signup",
    [
      verifySignUp.checkDuplicateUsernameOrEmail,
      verifySignUp.checkRolesExisted
    ],
    controller.signup
  );

  app.post("/api/auth/signin", controller.signin);
}; 

Это мое verifySignUp.js

 const db = require("../models");
const ROLES = db.ROLES;
const User = db.user;

checkDuplicateUsernameOrEmail = (req, res, next) => {
  User.findOne()

  // Username
  User.findOne({
    username: req.body.username
  }).exec((err, user) => {
    if (err) {
      res.status(500).send({ message: err });
      return;
    }

    if (user) {
      res.status(400).send({ message: "Failed! Username is already in use!" });
      return;
    }

    // Email
    User.findOne({
      email: req.body.email
    }).exec((err, user) => {
      if (err) {
        res.status(500).send({ message: err });
        return;
      }

      if (user) {
        res.status(400).send({ message: "Failed! Email is already in use!" });
        return;
      }

      next();
    });
  });
};

checkRolesExisted = (req, res, next) => {
  if (req.body.roles) {
    for (let i = 0; i < req.body.roles.length; i  ) {
      if (!ROLES.includes(req.body.roles[i])) {
        res.status(400).send({
          message: `Failed! Role ${req.body.roles[i]} does not exist!`
        });
        return;
      }
    }
  }

  next();
};

const verifySignUp = {
  checkDuplicateUsernameOrEmail,
  checkRolesExisted
};

module.exports = verifySignUp; 

Ответ №1:

В случае GET запроса вам необходимо получить доступ к параметрам, используя req.query вместо req.body . Итак, измените значение simple route на следующее

 app.get("/", (req, res) => {
  Username = req.query.username
  res.json({ message: "Welcome to Canteen Food Order APIs application ."   Username });
});
 

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

1. Нет. Я имею в виду «имя пользователя = req.body.имя пользователя» в «verifySignUp.js» но я уже изменил «тело» на «запрос», и это все еще не работает