收到来自 post 请求的 404 错误:邮递员

Posted

技术标签:

【中文标题】收到来自 post 请求的 404 错误:邮递员【英文标题】:receive 404 error from post request: postman 【发布时间】: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 您是否尝试关闭邮递员并重新打开然后尝试新标签 你能检查一下服务器是否在运行吗? 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

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

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

【讨论】:

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

404 表示未找到,

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

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

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

【讨论】:

以上是关于收到来自 post 请求的 404 错误:邮递员的主要内容,如果未能解决你的问题,请参考以下文章

PUT 请求 404 未找到错误邮递员? Node.js 快递

API POST 请求在邮递员和 Laravel 上返回 404 NOT FOUND PAGE

当我发送 POST 请求时,我在 AXON SAGA 实施中收到 404 错误。可能是啥原因? [关闭]

在改造中收到错误代码 400 错误请求,但适用于邮递员

MVC Post 请求始终返回 IIS 错误 500,但适用于邮递员

使用jwt与护照得到404错误