收到来自 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> &nbsp; &nbsp;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 错误。可能是啥原因? [关闭]