получить 404 ошибку от почтового запроса: почтальон - PullRequest
1 голос
/ 27 апреля 2020

Я пытаюсь сделать почтовый запрос от почтальона, но получаю сообщение об ошибке 404: SyntaxError: Unexpected token n in JSON at position 4<br> &nbsp; &nbsp;at JSON.parse. Я добавил заголовок Content-Type: application/json и определил тело json на вкладке raw. Это URL: http://localhost: 8000 / API / регистрации . Я не могу отправить этот пост-запрос и не могу получить доступ к приложению в браузере, когда я получаю cannot GET /api/signup.

enter image description here

Как это исправить ?

контроллеры / пользователь. js

const User = require('../models/user')
const { errorHandler } = require("../helpers/dbErrorHandler")

exports.signup = (req, res) => {
    console.log("req.body", req.body)
    // signs up new user
 const user = new User(req.body)
 user.save((err, user) => {
if(err) {
    return res.status(400).json({
        err: errorHandler(err)
    })
}
res.json({
    user 
 })
 })
}

приложение. js

const express = require('express')
const mongoose = require('mongoose')
const morgan = require('morgan')
const bodyParser = require('body-parser')
const cookieParser = require('cookie-parser')

require('dotenv').config()

// import routes
const userRoutes = require('./routes/user')

// app
const app = express()

// connect db - first arg is url (specified in .env)
mongoose.connect(process.env.DATABASE, {
useNewUrlParser: true,
useCreateIndex: true
}).then(() => console.log('DB connected'))

// middlewares 
app.use(morgan('dev'))
app.use(bodyParser.json())
// used to save users credentials
app.use(cookieParser())


// routes middleware
app.use('/api', userRoutes)

const port = process.env.PORT || 8000

app.listen(port, () => {
    console.log(`Server is running on port ${port}`)
})

модели / пользователь. js

const mongoose = require('mongoose')
const crypto = require('crypto')
const uuidv1 = require('uuid/v1')

const userSchema = new mongoose.Schema ({
...
}, {timestamps: true})



userSchema.methods = {
    encryptPassword: function(password) {
        if (!password) return '';
        // hashes password
        try {
            return crypto.createHmac('sha1', this.salt)
            .update(password)
            .digest('hex')
        } catch (err) {
            return ''
        }
    }
}

module.exports = mongoose.model("User", userSchema)

маршруты / пользователь. js

const express = require('express')
const router = express.Router()

const { signup} = require('../controllers/user')

router.post('/signup', signup)

module.exports = router

Ответы [ 3 ]

1 голос
/ 27 апреля 2020

Это похоже на две разные проблемы, для запроса POST ошибка выглядит так, как будто в вашей полезной нагрузке JSON есть недопустимая строка, которую ваше приложение не может прочитать и проанализировать.

Вторая причина в основном из-за маршрут не найден, не глядя на файл ./routes/user, кажется, что есть две возможности:

  1. У вас есть вложенный маршрут /user/.... Если это так, попробуйте получить доступ к вашему API через /api/user/signup вместо /api/signup
  2. Вы не создали маршрут GET для вашего signup пути. Обычно регистрация - это POST-путь вместо GET.

Было бы лучше, если бы вы могли предоставить нам исходный код ./routes/user.js, чтобы мы правильно ответили на него.

1 голос
/ 27 апреля 2020

404 означает НЕ найден,

Может быть, ваш URL или метод неправильный

Вот что вы можете попытаться диагностировать:

  1. Проверьте, если сервер выполняется
  2. Проверьте порт и URL, к которому вы обращаетесь.
  3. Проверьте метод почтальона POST и URL.
  4. Проверьте маршрут, файл маршрутов и сопоставьте это с почтальоном URL
0 голосов
/ 27 апреля 2020

404 ошибка - это код состояния HTTP, который означает, что страницу, которую вы пытались открыть на веб-сайте, не удалось найти на их сервере. Чтобы было ясно, ошибка 404 указывает, что, хотя сам сервер доступен, страница спецификаций c, показывающая ошибку, не является.

Убедитесь, что ваша индексация правильная и ваш локальный сервер работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...