从发帖请求中收到404错误:邮递员

时间:2020-04-27 11:11:48

标签: javascript node.js mongodb npm postman

我正在尝试向邮递员发出发帖请求,但是我收到404错误:SyntaxError: Unexpected token n in JSON at position 4<br> &nbsp; &nbsp;at JSON.parse。 我添加了Content-Type: application/json标头,并在raw选项卡中定义了json主体。 这是网址:http://localhost:8000/api/signup。 收到cannot GET /api/signup后,我无法发出此发布请求,也无法在浏览器中访问该应用程序。

enter image description here

我该如何解决?

controllers / user.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 
 })
 })
}

app.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}`)
})

models / user.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)

routes / user.js

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

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

router.post('/signup', signup)

module.exports = router

3 个答案:

答案 0 :(得分:1)

这似乎是两个不同的问题,对于POST请求,该错误似乎是您的JSON有效负载中存在无效的字符串,您的应用程序无法读取和解析该字符串。

第二个主要是由于找不到路由,而不查看您的./routes/user文件,似乎有两种可能性:

  1. 您有/user/...的嵌套路由。如果是这种情况,请尝试通过/api/user/signup而非/api/signup来访问您的api
  2. 您没有为signup路径创建GET路由。通常,注册是POST路径,而不是GET

最好提供./routes/user.js的源代码,以便我们正确回答。

答案 1 :(得分:1)

404表示未找到,

可能是您的网址或方法错误

您可以尝试诊断以下内容:

  1. 检查服务器是否正在运行
  2. 检查您正在访问的端口和URL。
  3. 检查邮递员方法 POST 和URL。
  4. 检查路线,路线文件并将其与邮递员URL匹配

答案 2 :(得分:0)

404错误是HTTP状态代码,这意味着您尝试在其网站上访问的页面无法在其服务器上找到。需要明确的是,404错误表示虽然服务器本身可以访问,但显示错误的特定页面却没有。

确保索引正确并且本地服务器运行正常。