使用 url 参数但不使用特定子路由的快速路由

Express routes working with url params but not with specific sub routes

我正在为我的网络应用程序构建一个 API,当 Post.js 中的路由只有 url 参数时,我能够成功地将请求发送到它们。但是,当我尝试创建类似“/allposts”(Post.js 中的最后一个端点)的路由时,我在邮递员上收到了 404 错误消息。这是我的代码:


router.post('/', (req, res) => {
    // Endpoint 1 code here

})

router.get('/:id', (req, res) => {
    // Endpoint 2 code

})

// This is the route that I can't to send requests to
router.get('/ap', async(req, res) => { 

    try{
        const ap = await P.find()
        res.send(ap)
    } catch(error){
        log(error)
        res.status(500).send("error")
    }

})

server.js

const express = require('express')
var cors = require('cors')
const fs = require('fs');
const path = require('path');
var app = express()
app.use(express.static(path)
app.use(cors())
const bodyParser = require('body-parser')
app.use(bodyParser.json());

var p = require("./routes/P.js");

app.use('/post', p);

const PORT = process.env.PORT || 3001
app.listen(port, () => {
    log(`Listening on port ${PORT}...`)
});

当我向 http://localhost:3001/post/ap 发送请求时,出现 404 Not Found 错误,但前两条路由工作正常。似乎带有 url 参数的路由有效,但 allposts 路由无效。任何帮助将不胜感激。谢谢

主要问题是路线的顺序。

router.get('/:id') 将在 router.get('/allposts') 之前初始化。所以当你想访问 /allposts 时,第一个路由器会捕获它。

您需要切换初始化顺序。

首先 router.get('/allposts') 然后 router.get('/:id')