我是Node.js和Express.js及其路由的新手。这一切都设置正确,除了以下代码外,它都可以正常工作。
我尝试了以下代码:
app.get("/game/*", function(req, res) {
res.sendFile(__dirname + "/public/game.html?gameId=" + /\/([^\/]+$)/.exec(req.url)[1]);
});
目标是将/game/{gameId}
(其中gameId
为某个数字)的所有请求发送至/public/game.html?gameId={gameId}
。
使用/game/
正确获取请求,从网址获取gameId
参数,然后尝试sendFile()
。但是,sendFile()
不起作用,说:
web.1 |错误:ENOENT,stat'/ opt / lampp / htdocs / papei / public / game / 32'
我搜索了这个错误,我想这与未找到的文件有关。问题是,/public/game.html
存在。如果我删除了?gameId...
中的sendFile()
部分,那么它就可以了。但我想sendFile()
正在寻找一个完全的网址,而且找不到它。
有没有办法使用ExpressJS发送URL GET参数?
答案 0 :(得分:3)
我认为问题在于sendFile
试图找到完全匹配(您的查询参数中断),如您所想。
您可以使用express-static
来提供html页面,然后根据需要重定向到它:
app.get("/game/:gameid", function(req, res) {
// Not ideal, as it uses two requests
res.redirect('/game.html?gameId=' + req.params.gameid)
});
或者您可以将html放在模板中并为响应呈现它,例如:
app.get("/game/:gameid", function(req, res) {
// Render the 'game' template and pass in the gameid to the template
res.render('game', {gameid: req.params.gameid})
});
无论哪种方式,您都不需要使用catch all all route和regex来获取查询参数,请参阅快速文档中的req.params或req.query。
希望这有帮助。