我正在尝试向我的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.任何想法?
答案 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
等请求。