【问题标题】:getting 404 from a route with a param - express 4从带有参数的路线中获取 404 - express 4
【发布时间】:2014-03-30 01:27:16
【问题描述】:

我试图在路由中使用参数...尝试了 express 网站上的 4.x 文档但没有用..我仍然得到 404...似乎它没有达到我的功能..

创建和列出所有项目的其他路线都很好..

var db = require('../db');

var express = require('express');
var mongoose = require( 'mongoose' );
var Users = mongoose.model( 'Users' );
var app = express.Router();



//PARAM
app.param('name', function(req, res, next, name) {
    Users.find({name:name}, function(err, docs) {
        if (err) {
            return next(err);
        }
        else if (!name) {
            return next(new Error('failed to load user'));
        }

        req.user = docs[0];
        next(); 
    });
});

//SHOW
app.get('/users/:name', function(req,res){
    res.render('users/profile', {user: req.user});
});

尝试了一个简单的版本...相同的 404...(顺便说一句,名称存在..它显示在列表项上)

//SHOW
    app.get('/users/:name', function(req, res, name){
    var name = req.param('name');
    Users.find({name: name}, function(err, docs) {  
        req.user = docs[0];
        next(); 
    }); 
res.render('users/profile', {user: req.user});
});

【问题讨论】:

    标签: node.js express routes


    【解决方案1】:

    这是因为您正在使用 Express 4 路由器,就像它是 Express 3 应用一样。路由器允许您设置相关路由的集合,就像您所做的那样。但是,您必须将路由器连接到更大的 Express 服务器。

    var express = require('express');
    var app = express();
    var router = express.Router();
    
    // attach some things to router
    // router.get('/users/:name', ...)
    
    app.use('/foo', router);
    

    会将router 处理的所有路径挂载到/foo 路径下,例如/foo/users/:name

    【讨论】:

    • 我用它来调用我的 app.js --> app.use('/users', require('./routes/users').users);
    • 我是个菜鸟...谢谢..问题是..我已经使用 app.use 设置了根路由器..但我把 /users/:name ... 应该只使用 /:name
    猜你喜欢
    • 2018-04-07
    • 2017-07-19
    • 2015-04-18
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    • 2015-12-10
    相关资源
    最近更新 更多