【问题标题】:receive 404 error from post request: postman收到来自 post 请求的 404 错误:邮递员
【发布时间】:2020-08-10 22:20:15
【问题描述】:

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

我该如何解决这个问题?

控制器/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)

路由/user.js

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

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

router.post('/signup', signup)

module.exports = router

【问题讨论】:

  • 你可以试试 POST /api/user/signup
  • 你能发布`./routes/user``文件的内容吗?
  • 我在发布 /api/user/signup 时仍然收到相同的错误。我已经用代码更新了我的问题。 @Harshal
  • 您是否尝试关闭邮递员并重新打开然后尝试新标签
  • 你能检查一下服务器是否在运行吗?

标签: javascript node.js mongodb npm postman


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    第二种主要是找不到路由,不看你的./routes/user文件,好像有两种可能:

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

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

    【讨论】:

    • 感谢您的回答。我已经提供了 ./routes/user.js 的代码并且服务器正在运行。我不认为我有 /user/ 的嵌套路由,因为通过 /api/user/signup 访问 api 不起作用。 @Kong
    • 访问 GET 将不起作用,因为您将路由定义为 POST。您可以发布导致 JSON 错误的有效负载吗?
    【解决方案3】:

    404 表示未找到,

    可能是你的网址或方法有误

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

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

    【讨论】:

      猜你喜欢
      • 2019-04-28
      • 2021-05-12
      • 2018-01-11
      • 1970-01-01
      • 2017-12-30
      • 2019-02-10
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      相关资源
      最近更新 更多