404访问新路线时

时间:2015-08-23 15:11:54

标签: node.js express

我正在尝试向我的NodeJS Express Web应用程序添加新路由(/ profile)。我已经修改了我的app.js文件:

var routes = require('./routes/index');
var profile = require('./routes/profile');

app.use('/', routes);
app.use('/profile', profile);

'/'索引路径工作正常,我的问题是'/ profile'。每当我尝试访问它时,我都会获得404.这是profile.js:

var express = require('express');
var router = express.Router();

router.get('/profile', function(req, res) {
    var username = req.session.username;

    if(username) {
        res.render('profile');
    } else {
        res.redirect('/login');
    }
});

module.exports = router;

我不明白我做错了什么,因为在生成的示例快速应用程序中,'/ users'工作正常。我基本上复制了那种格式,但是它会抛出404.任何想法?

2 个答案:

答案 0 :(得分:1)

在我的$(function() { function matchQryString(e) { e.preventDefault(); alert("Running AJAX"); $.ajax({ type:'POST', url: 'rtnJSON.php', data:$('#frmSearch').serialize(), dataType: 'json', success: function(response) { alert("PHP Return SUCCESS"); alert(response); }, error: function (jqXHR, exception) { alert("PHP Return ERROR"); alert(jqXHR); alert(exception); console.log(jqXHR); var op = ""; for (property in jqXHR) { op += property + ': ' + obj[property]+'; '; } alert ("Unpacked: " + op); } }); }; $("[name=submit]").on("click", matchQryString); }) 中,我不得不将\/\*([\s\S]*?)\*\/ 请求路径更改为:

profile.js

否则,GET会寻找router.get('/', function(req, res) { //code }); 。当我将其更改为router时,它只是寻找`/ profile'的根,或者至少是我理解它的方式。

答案 1 :(得分:0)

要了解您做错了什么,您应该知道Node.js使用中间件函数来路由您的请求。为简化起见,您可以将其视为功能链

  

中间件就像一个管道管道,请求从您定义的第一个中间件开始,然后按照中间件堆栈处理的方式为它们匹配的每个路径“。”

因此,使用以下语句,您添加了一个中间件函数来处理以根路径/profile开头的任何请求,并且它是Node中使用use方法定义根路径的常见模式

app.use('/profile', profile);

使用方法正在您的方案中执行路由的一部分,上面的语句将匹配从该路径开始的任何路由,包括/profile/all/profile/12或甚至/profile/go/deeper/inside

但是,您希望将该路由缩小到更具体的路由,这就是为什么您传递路由器中间件函数(在您的情况下为profile)以匹配更具体的路由而不是以{{开头的所有路由1}}。

/profile中间件函数实际上是要执行的函数链中的下一步,它将从profile语句中指定的根路径开始,这就是您需要的原因使用use重新开始,而不是/。如果您想按ID匹配个人资料,您可以这样做:

/profile

哪个将与基本网址(来自/ use语句)连接,并匹配router.get('/:id', ...) /profile/2等请求。