Я создаю свой первый бэкэнд с 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;