【问题标题】:Cannot Make POST or GET Request with Express API无法使用 Express API 发出 POST 或 GET 请求
【发布时间】:2020-10-22 00:33:33
【问题描述】:

我正在尝试测试我的 API,但我不确定我做错了什么。我得到的唯一错误是无法发布。经过一番研究,我怀疑我的控制器类有问题。

这是我的第一个真正的大型项目,我创建了一个与此类似的 API,仅使用 mongo,但这是我第一次使用 seqealize 和 MySQL(使用节点)。

api/student/register 路由器不会发布,但是当我删除控制器时,一个只返回纯 JSON 的函数可以正常工作,这就是为什么我真的相信它与我的控制器类有关。

控制器/student.controller.js

const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');
require('dotenv').config();
const secret =  process.env.SERCRET_KEY;

const db = require('../models/index.js');
const Student = db.Student;


class StudentContoller {

  static registerStudent(req, res) {
      try {
        let { 
          first_name, 
          last_name, 
          email, 
          password, 
          phone, 
          shirt_size,
          grade,
          teacher, 
         } = req.body;

         Student.findAll({
           where: {
             email : email,
             is_Archived: false,
          }
         })
         .then(result => {
           if (result.length > 0){
             res.status(400).json({ message: 'Email is already registerd'});
           } else {
             let hashPassword = bcrypt.hashSync(password, 10); 
             let newStudent =  {
              first_name, 
              last_name, 
              email, 
              password: hashPassword, 
              phone, 
              shirt_size,
              grade,
              teacher, 
              school_id,
             }
             Student.Create(newStudent)
             .then(data => {
               if(data){
                 res.status(201).json({message: 'Student Created', student: data })
               }
             })
             .catch(err => res.json({error : err.message})); 
           }
         })
    } catch (e) {
      res.status(500).json({error: 'error caused in regiserted controller'})
    }
  }

  static async login(req, res) {
    let { email, password, } = req.body;
    
    await Student.findAll({ 
      where: {
        email: email,
        is_Archived: false,
      }
    })
    .then(student => {
      if(student.length === 0){
        res.status(400).json({ message: 'Sorry, account does not exsist'})
      } else {
        let passwordIsValid = bcrypt.compareSync(req.body.password, student[0].password.trim());
        if (passwordIsValid) {
            let studentDetails = {
              id: student[0].dataValues.id,
              first_name: student[0].first_name,
              last_name: student[0].last_name,
            }
            let token = jwt.sign({
              student: studentDetails,
            }, secret, {
              expiresIn: '1d'
            });

            res.status(200).json({
              success: true,
              student: studentDetails,
              message: 'Login successfull',
              token: token,
            });
        } else {
          res.status(401).json({
            success: false,
            message: 'Login failed',
          });
        }
      }

    })
    .catch(err => res.status(500).json({error: err.message}));
  }

  static async updateStudent(req, res) {
    try {
      const {
        first_name, 
        last_name, 
        email, 
        password, 
        phone, 
        shirt_size,
        grade,
        teacher, 
      } = req.body;
      let hashpassword = bcrypt.hashSync(password, 10); 
      
      let updateStudent = {
        first_name, 
        last_name, 
        email, 
        password : hashpassword, 
        phone, 
        shirt_size,
        grade,
        teacher, 
      }

      Student.update(updateStudent, {
        where: {
          id: req.params.id
        }
      })
      .then(response => {
        res.status(200).json({success: true, message: "Student updated successfully"})
      })
      .then(err => res.json({err: err.message}));
    } catch (e) {
      res.status(500).json({ error: e});
    }

  }

  static async archiveStudent(req, res) {
    try{
      let id = req.params.id
      await Student.findAll({
        where: {id: id}
      })
      .then(result => {
        if (result.length == 1){
           Student.update(
            {is_Archived: true},
            { where: {id: id}}
          )
        }
      })
    } catch (e) {
      res.status(500).json({ error: e});
    }
  }

}

module.exports = StudentContoller;

student.routs.js

const express = require('express');
const router = express.Router();
const jwt = require('jsonwebtoken');
const checkJWT = require('../middlewares/check-token');


const StudentController = require('../controllers/student.controller');


//
//
router.get('student/login', StudentController.login);
router.post('student/register', checkJWT,StudentController.registerStudent);

module.exports = router;

服务器js

const express = require('express'); 
const bodyParser = require('body-parser');
const cors = require('cors');
const morgan = require('morgan');
const helmet = require('helmet');


const app = express();



// Middlewars
app.use(cors()); // Enable Cors
app.use(morgan('dev')); // Enable Logging
app.use(helmet()); // Enables Security Headers
app.use(bodyParser.json()); // Parses requrests of type application/json
app.use(bodyParser.urlencoded({ extended: true})); // Parses request of application/x-www-form-urlencode 


//Add database connection
const db = require('./models');
//db.sequelize.sync().then(()=> initial())

// Routing

app.get('/', (req, res)=> res.json({message: "Base API URL"})); 

const studnetRoute = require('./routes/student.routes');
app.use('/', studnetRoute);



const PORT = process.env.PORT || 3300;

app.listen(PORT, () => console.log(`Server Running on port ${PORT}`));

【问题讨论】:

    标签: rest express sequelize.js


    【解决方案1】:

    你可以在你的路由器文件中这样做。

    router.route('student/login')
        .get(StudentController.login);
    
    router.route('student/register')
        .post(checkJWT, StudentController.registerStudent);
    

    【讨论】:

    • @Alexmatthew_Candelario 如果这有帮助,也请投票!
    猜你喜欢
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    相关资源
    最近更新 更多