【问题标题】:Only able to access one route from routes hierarchy只能从路线层次结构中访问一条路线
【发布时间】:2019-01-13 11:02:40
【问题描述】:

我正在尝试直接从请求中访问路由,即使另一个子文件夹可以正常工作,而另一个不能。反复抛出 404 错误。 /api/getPostList 有效,但 /post//post/:title 无效。

我已经重组了代码,尝试将其从获取请求更改为发布请求,添加 /post/:title 以访问单个帖子或不添加 / 以访问主列表。

Server.js 包含

app.use('/', Routes);

routes/index.js 包含

const router = require('express').Router();
const posts = require('./posts');
const api = require('./api');

router.use('/post', posts);
router.use('/api', api);

module.exports = router;

routes/api/index.js 包含

Api.get('/getPostList', (req, res) => {
    PostModel.find(function (err, post) {
    if (err) return console.log('error: ' + err);
    return res.json({ postList: post});
    });
console.log("Attempted to get post list on /getPost/ route: " + ++postRouteCnt);
});

Api.get('/getPost/:title', getPost);
module.exports = Api;

routes/post/index.js 包含

const Posts = require('express').Router();
const post = require('./post');
const PostModel = require('../../../server/models.js');

let postRouteCnt = 0;
Posts.get('/', (req, res) => {
    PostModel.find(function (err, post) {
        if (err) return console.log('error: ' + err);
        return res.json({ postList: post});
    });
    console.log("Attempted to get post list on /post/ route: " + ++postRouteCnt);
});

Posts.get('/:title', post);

module.exports = Posts;

调用 /post/ 时,我应该收到 json 响应时收到 404 Cannot GET /post/

编辑: 文件夹结构

 Server/

   routes/

     api/

      index.js

      getPost.js (for individual post)

     posts/

      index.js

      post.js (for individual post)

   server.js

【问题讨论】:

  • 你能添加你的posts/index.js文件吗
  • 更新了完整的帖子/index.js

标签: node.js reactjs express


【解决方案1】:

根据你的结构文件夹,我尝试用简单的代码写代码

App.js:

const express = require('express')
const app = express()
const port = 3000
const Routes = require('./routes/posts/index.js');

app.use('/', Routes);

app.listen(port, () => console.log(`Example app listening on port ${port}!`))

.routes/posts/index.js:

const express = require('express');
const router = express.Router();
const postController = require('./post');

// GET /
router.get('/posts', postController.getPosts);

module.exports = router;

.routes/posts/post.js:

exports.getPosts = (req,res) => {
  res.send('test');
}

尝试输入http://localhost:3000/posts 及其工作

您可以在 .routes/posts/post.js 中编写任何逻辑:

【讨论】:

  • 我添加了文件夹结构,我尝试了您的解决方案,但仍然收到错误
  • 重构了所有代码,仍然无法处理get请求
  • 你愿意分享这个github项目吗,我可以再检查一下代码
  • 受邀成为合作者。它在服务器分支上
  • 我一直在编辑您的存储库项目的 server.js、routes/index.js、reoutes/posts/index.js 并确保您需要现有文件
【解决方案2】:

尝试像这样改变它

Posts.get('/', (req, res) => {
    PostModel.find(function (err, post) {
        if (err) throw err;
        res.send({ postList: post});
    });
    console.log("Attempted to get post list on /post/ route: " + ++postRouteCnt);
});

现在试试这个网址

/发布/

【讨论】:

  • 仍然无法使用更新的解决方案获取 JSON
  • 更新文件夹结构
  • 现在试试我再次更新了答案问题应该是你的回复声明
  • 即使有更新的回报,仍然无法发出。
猜你喜欢
  • 2017-07-23
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多