Маршруты API и почтальон для аутентифицированного входа - PullRequest
0 голосов
/ 20 июня 2020

Я создаю свой первый бэкэнд с Node / Express и ищу аутентифицированный вход. В настоящее время я пытаюсь получить успешный ответ от почтальона при тестировании маршрута api. Я считаю, что проблема в том, как настроены мои маршруты.

Приложение загружается в браузере. Когда я пытаюсь отправить форму регистрации через Chrome, я получаю bundle.js:6 POST http://localhost:8000/insert 404 (Not Found), что, как мне кажется, связано с тем, что я еще не подключил кнопку регистрации. Сообщение, которое я получаю от почтальона:

POST http://localhost:8000/api/users/register
Error: socket hang up
Request Headers
User-Agent: PostmanRuntime/7.25.0
Accept: */*
Postman-Token: 61a9832c-e490-4ea7-a987-25b678817061
Host: localhost:8000
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Request Body
username: "testinggg"
email: "test@test.net"
password: "test123"

Мне что-то не хватает в настройке моих маршрутов, или я должен использовать другой URL-адрес в Postman для тестирования?

сервер. js

const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const app = express();
const mongoose = require('mongoose');
const passport = require('passport');
const users = require('./routes/api/users');
const router = require('./routes/api/users');


app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, '../client'));
app.use(express.static(path.join(__dirname, '../client')));
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: false}));

app.use('/', router)

//MongoDB setup
const db = require('./config/keys').mongoURI
mongoose.connect(db);

//Passport middleware
app.use(passport.initialize());

//Passport config
require("./config/passport")(passport);

//Routes
app.use('/api/users', users);

module.exports = app;

пользователей. js (должны быть маршрутизаторы. js)

const express = require('express');
const router = express.Router();
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const keys = require('../../config/keys');

//Load input validation
const validateRegisterInput = require('../../validation/register');
const validateLoginInput = require('../../validation/login');

//Load user model
const User = require('../../models/User');

router.get('/', function(req, res) {
    res.render('index')
});

router.get('/login', function(req, res) {
    res.render('index')
});

router.get('/register', function(req, res) {
    res.render('index')
});

// @route POST api/users/register
// @desc Register user
// @access Public
router.post('/register', (req, res) => {
    //Form validation

    const { errors, isValid } = validateRegisterInput(req.body);

    //Check validation
    if (!isValid) {
        return res.status(400).json(errors);
    }

    User.findOne({ username: req.body.username }).then(user => {
        if(user) {
            return res.status(400).json({ username: "Username already exists" });
        } else {
            const newUser = new User({
                username: req.body.username,
                email: req.body.email,
                password: req.body.password
            });

            //Hash password before saving in databse
            bcrypt.genSalt(10, (err, salt) => {
                bcrypt.hash(newUser.password, salt, (err, hash) => {
                    if(err) throw err;
                    newUser.password = hash;
                    newUser
                        .save()
                        .then(user => res.join(user))
                        .catch(err => console.log(err));
                });
            });
        }
    });
});

// @route POST api/users/login
// @desc Login User and return JWT token
// @access Public
router.post('/login', (req, res) => {
    //Form validation

    const { errors, isValid } = validateLoginInput(req.body);

    //Check Validation
    if(!isValid) {
        return res.status(400).json(errors);
    }

    const username = req.body.username;
    const password = req.body.password;

    //Find user by username
    User.findOne({ username }).then(user => {
        //Check if user exists
        if (!user) {
            return res.status(400).json({ usernamenotfound: "Username not found" });
        }

        //Check password
        bcrypt.compare(password, user.password).then(isMatch => {
            if(isMatch) {
                //User match
                //Create JWT payload
                const payload = {
                    id: user.id,
                    name: user.name
                };

                //Sign token
                jwt.sign(
                    payload,
                    keys.secretOrKey,
                    {
                        expiresIn: 31556926 // 1 year in seconds
                    },
                    (err, token) => {
                        res.json({
                            success: true,
                            token: "Bearer " + token
                        });
                    }
                );
            } else {
                return res
                    .status(400)
                    .json({ passwordincorrect: "Password is incorrect" });
            }
        });
    });
});

module.exports = router;
...