Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js ExpressJS sendFile()无法发送URL GET参数_Node.js_Express_Routing - Fatal编程技术网

Node.js ExpressJS sendFile()无法发送URL GET参数

Node.js ExpressJS sendFile()无法发送URL GET参数,node.js,express,routing,Node.js,Express,Routing,我不熟悉Node.js和Express.js及其路由。它的所有设置都是正确的,除了下面的代码之外,它都可以正常工作 我尝试了以下代码: app.get("/game/*", function(req, res) { res.sendFile(__dirname + "/public/game.html?gameId=" + /\/([^\/]+$)/.exec(req.url)[1]); }); 目标是将带有/game/{gameId}(其中gameId是一些数字)的所有请求发送到/pub

我不熟悉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/
正确地获取请求,从URL中获取
gameId
参数,并尝试
sendFile()
发送请求。但是,
sendFile()
不起作用,表示:

web.1 |错误:enoint,stat'/opt/lampp/htdocs/papei/public/game/32'

我已经搜索了这个错误,我想这与找不到文件有关。问题是,
/public/game.html
存在。如果我删除了
sendFile()
中的
?gameId…
部分,那么它就可以工作了。但是我猜
sendFile()
正在寻找一个确切的URL,但没有找到它


是否有任何方法可以使用ExpressJS发送URL GET参数?

我认为问题在于
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路由和regex来获取查询参数,请参见或在express文档中


希望这能有所帮助。

我正在尝试重定向,但它不起作用。我不知道如何制作一个模板——你能提供相关文档吗?谢谢。另外,您所说的“快速静态”是什么意思?它是否与我当前使用的代码不同?如果您试图使用重定向,请确保您的express静态中间件位于重定向路由之下。是解释模板引擎的文档,是提供静态文件的文档(aka
express static
)。我不知道。当您只显示代码的一小部分时,这就是问题的一部分。请包括所有相关代码,否则人们只能猜测。我建议你考虑使用模板方法——如果你已经编写了很多html,你可能会想使用非常类似的东西(我建议你看看车把)。它现在起作用了。谢谢感谢您提供有关模板和req.params的额外信息。