在nodejs中传递查询参数但路由给出错误
Passing query parameter in nodejs but route is giving error
我想在路由中传递查询参数。我使用了身份验证中间件。
我想根据那个任务 ID 删除一个任务。后来我想通过 id 路由将 auth 传递到 delete 并允许用户通过身份验证删除任务,但是当我传递查询参数时,端点失败。如果没有传递查询参数,一切正常。
task.js
const express = require('express')
require('../mongoose')
const Task = require('../model/task_model')
const auth = require('../middleware/user_middleware')
const router = new express.Router()
router.delete('/tasks/del/:id', async (req, res) => {
try {
const task = await Task.findByIdAndDelete(req.params.id)
if (!task) {
res.status(404).send()
}
res.send(task)
} catch (e) {
res.status(500).send()
}
})
module.exports = router
index.js
const express = require('express')
const UserRouter = require('./router/user')
const TaskRouter = require('./router/task')
const app = express()
const port = process.env.PORT || 3000
app.use(express.json())
app.use(UserRouter)
app.use(TaskRouter)
app.listen(port,()=>{
console.log('Server listening on port: ' + port)
})
middleware.js
const jwt = require("jsonwebtoken")
const User = require("../model/user_model")
const auth = async function(req,res,next){
try {
const token = (req.headers.authorization).split(' ')[1]
const decoded_token = jwt.verify(token,'ankan123')
const user = await User.findOne({_id:decoded_token._id,"tokens.token":token})
if (!user){
throw new Error()
}
req.user = user
req.token = token
next()
} catch(e){
res.status(400).send("PLease Authenticate")
}
}
module.exports = auth
task_model.js
const mongoose = require('mongoose')
const TaskSchema = new mongoose.Schema({
task: {
type: String,
required:true,
},
completed:{
type: Boolean
},
creator:{
type: mongoose.Schema.Types.ObjectId,
required:true
}
})
const tasks = mongoose.model('Task', TaskSchema)
module.exports = tasks
user.js
const express = require('express')
require('../mongoose')
const User = require('../model/user_model')
const auth = require('../middleware/user_middleware')
const router = new express.Router()
router.post('/users/login', async (req, res) => {
try {
const user = await User.matchCred(req.body.mobileNo, req.body.password)
const token = await user.generateToken(user._id)
return res.status(200).send({
user,
token
})
} catch (e) {
res.status(400).send()
}
})
module.exports = router;
我收到包含 /tasks/del/:id 的路由在使用邮递员发送删除请求时不存在。
问题很简单,您将其作为查询参数传递,但它是路径参数。你可以在邮递员中这样运行:
{url}/tasks/del/'yourID'
当您将 id 作为查询参数传递时,它将无法匹配路径,因此您会收到错误 Can't Delete
。我会说你应该了解 diff b/w 它们,你可以检查 this link.
我想在路由中传递查询参数。我使用了身份验证中间件。
我想根据那个任务 ID 删除一个任务。后来我想通过 id 路由将 auth 传递到 delete 并允许用户通过身份验证删除任务,但是当我传递查询参数时,端点失败。如果没有传递查询参数,一切正常。
task.js
const express = require('express')
require('../mongoose')
const Task = require('../model/task_model')
const auth = require('../middleware/user_middleware')
const router = new express.Router()
router.delete('/tasks/del/:id', async (req, res) => {
try {
const task = await Task.findByIdAndDelete(req.params.id)
if (!task) {
res.status(404).send()
}
res.send(task)
} catch (e) {
res.status(500).send()
}
})
module.exports = router
index.js
const express = require('express')
const UserRouter = require('./router/user')
const TaskRouter = require('./router/task')
const app = express()
const port = process.env.PORT || 3000
app.use(express.json())
app.use(UserRouter)
app.use(TaskRouter)
app.listen(port,()=>{
console.log('Server listening on port: ' + port)
})
middleware.js
const jwt = require("jsonwebtoken")
const User = require("../model/user_model")
const auth = async function(req,res,next){
try {
const token = (req.headers.authorization).split(' ')[1]
const decoded_token = jwt.verify(token,'ankan123')
const user = await User.findOne({_id:decoded_token._id,"tokens.token":token})
if (!user){
throw new Error()
}
req.user = user
req.token = token
next()
} catch(e){
res.status(400).send("PLease Authenticate")
}
}
module.exports = auth
task_model.js
const mongoose = require('mongoose')
const TaskSchema = new mongoose.Schema({
task: {
type: String,
required:true,
},
completed:{
type: Boolean
},
creator:{
type: mongoose.Schema.Types.ObjectId,
required:true
}
})
const tasks = mongoose.model('Task', TaskSchema)
module.exports = tasks
user.js
const express = require('express')
require('../mongoose')
const User = require('../model/user_model')
const auth = require('../middleware/user_middleware')
const router = new express.Router()
router.post('/users/login', async (req, res) => {
try {
const user = await User.matchCred(req.body.mobileNo, req.body.password)
const token = await user.generateToken(user._id)
return res.status(200).send({
user,
token
})
} catch (e) {
res.status(400).send()
}
})
module.exports = router;
我收到包含 /tasks/del/:id 的路由在使用邮递员发送删除请求时不存在。
问题很简单,您将其作为查询参数传递,但它是路径参数。你可以在邮递员中这样运行:
{url}/tasks/del/'yourID'
当您将 id 作为查询参数传递时,它将无法匹配路径,因此您会收到错误 Can't Delete
。我会说你应该了解 diff b/w 它们,你可以检查 this link.