首页 > 解决方案 > 请求一条路线,但我响应另一条路线

问题描述

我为我的文凭项目制作了一个 RestAPI,现在我的一条路线出现了问题。我正在发送一个带有搜索参数的请求,但我响应了一条通过 id 查找的路线。也许我只是用参数写了不正确的请求,而我的 API 认为这是带 id 的请求?

我的 index.js

const express = require('express');
const mongoose = require('mongoose');
const cors = require('cors');
const cookieParser = require('cookie-parser');
const adminRoute = require('./routes/admin');
const courierRoute = require('./routes/couriers');
const customerRoute = require('./routes/customer');
const brandRoute = require('./routes/brands');
const adminTokenRoute = require('./routes/adminTokens');
const courierTokenRoute = require('./routes/courierTokens');
const dotenv = require('dotenv');

const app = express();
dotenv.config()

app.use(express.json({ limit: '30mb', extended: true }));
app.use(express.urlencoded({ limit: '30mb', extended: true }));
app.use(cookieParser());
/*app.use(cors({
    credentials: true,
    origin: 'http://localhost:3000'
}));*/
app.use(cors());

app.use(adminRoute);
app.use(courierRoute);
app.use(customerRoute);
app.use(brandRoute);
app.use(adminTokenRoute);
app.use(courierTokenRoute);

app.get('/', (req, res) => {
    res.send('App is running');
})

const CONNECTION_URL = process.env.MONGODB_URL;
const PORT = process.env.PORT || 5001;

mongoose.connect(CONNECTION_URL, { useNewUrlParser: true, useUnifiedTopology: true, 
useCreateIndex: true, useFindAndModify: false })
  .then(() => app.listen(PORT, () => console.log(`Server Running on Port: 
  http://localhost:${PORT}`)))
  .catch((error) => console.log(`${error} did not connect`));

mongoose.set('useFindAndModify', false);

我的品牌.js

const express = require('express');
const Brand = require('../models/catalog/brands');
const Admin = require('../models/users/admin');
const Manager = require('../models/users/manager');
const StoreKeeper = require('../models/users/storeKeeper');
const auth = require('../middleware/auth');

const router = express.Router();

router.get('/brands/:id', async (req, res) => {
    const { id } = req.params;

    try {
        const item = await Brand.findById(id);

        res.json({ item });
    } catch (err) {
        res.status(404).json({ error: 'Brand is not found!' });
    }
});

router.get('/brands/search', async (req, res) => {
    const { searchQuery } = req.query;

    try {
        const title = new RegExp(searchQuery, 'i');

        const items = await Brand.find({ name: title });

        res.json({ items });
    } catch (err) {
        res.status(404).json({ error: 'Wrong request' });
    }
});

module.exports = router;

当我发送带有 id 的请求时,一切正常, 在此处输入图像描述

但是,当我发送带有查询参数的请求时,我从通过 id 搜索项目的路线收到错误响应,在 此处输入图像描述

它可以是什么?提前感谢所有答案。

标签: node.jsexpress

解决方案


将Route放在 './routes/brands/' 文件中的 Route/brands/search上方。/brands/:id

如果您将 Route 放在 Route/brands/:id之前/brands/search,它将考虑 'search' 词作为参数 'id'


推荐阅读