首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法使用Express API发出POST或GET请求

无法使用Express API发出POST或GET请求
EN

Stack Overflow用户
提问于 2020-07-01 22:17:23
回答 1查看 83关注 0票数 1

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

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

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

contoller/Student.Controler.js

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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}`));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-02 11:52:15

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

代码语言:javascript
运行
复制
router.route('student/login')
    .get(StudentController.login);

router.route('student/register')
    .post(checkJWT, StudentController.registerStudent);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62678903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档