Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.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
Javascript Express js-无法从url获取查询参数(req.query是空对象)_Javascript_Node.js_Reactjs_Express - Fatal编程技术网

Javascript Express js-无法从url获取查询参数(req.query是空对象)

Javascript Express js-无法从url获取查询参数(req.query是空对象),javascript,node.js,reactjs,express,Javascript,Node.js,Reactjs,Express,我知道有人提到过这个话题,但它对我不起作用 我正在尝试使用req.query从URL获取参数。在我的server.js文件中,我有以下内容: app.get('/reset pass',函数(req,res){ 控制台日志(请求url); 控制台日志(请求查询); }) 当我输入URL时,例如http://localhost:3000/reset-pass?email=anything,服务器控制台输出以下内容: /reset-pass [Object: null prototype] {}

我知道有人提到过这个话题,但它对我不起作用

我正在尝试使用
req.query
从URL获取参数。在我的
server.js
文件中,我有以下内容:

app.get('/reset pass',函数(req,res){
控制台日志(请求url);
控制台日志(请求查询);
})
当我输入URL时,例如
http://localhost:3000/reset-pass?email=anything
,服务器控制台输出以下内容:

/reset-pass
[Object: null prototype] {}
当我从
http://localhost:4001/reset-通过
,浏览器控制台输出空对象:

data {
    "query": {}
}
如您所见,我在
4001
端口上运行节点服务器,在
3000
上运行客户端站点(因为我在该端口上运行React),它在
POST
请求或重定向方面运行得很好,但在
GET
情况下,它不会返回查询参数。任何奇怪的
#
都不会出现在我的路径中(或者我只是不知道)

有什么问题吗?

试试看

req.query.email

希望这能解决您的问题

您的代码中一定还有其他问题。 因为我刚和你一样做了测试,完全一样的路线

router.get('/reset-pass', function (req, res) {
    console.log(req.url);
    console.log(req.query);
    res.json({
        url: req.url,
        query: req.query,
    });
});
返回为:

{
    "url": "/reset-pass?email=anything",
    "query": {
        "email": "anything"
    }
}
和console.log作为:


没关系。此操作没有问题。您应该检查代码的其他部分。

我已经找出了问题所在

服务器一切正常。当我在浏览器中使用服务器端口而不是客户端端口键入查询时(
http://localhost:4001/reset-pass?email=anything
),console.log in服务器终端正确输出所有内容(如上所述),或在页面上(例如使用
res.send()
)显示预期数据

问题在于在React(客户端视图)中显示URL参数。 在这种情况下,尝试获取数据是不必要的。我应该使用如下方式指定路线:

App.js

然后在ResetPass.js中使用,我可以显示查询参数。对于快速pars URL字符串,我添加了一个模块

ResetPass.js
import React,{Fragment}来自“React”;
从“查询字符串”导入查询字符串;
const ResetPass=({match,location})=>{
控制台日志(“匹配”,匹配);
控制台日志(“位置”,位置);
const parsed=queryString.parse(location.search);
返回(
Params:{parsed.email}

{/*=>Params:anything*/} ); }; 导出默认重置通行证;
所以当我输入URL
http://localhost:3000/reset-pass?email=anything
,console.log(在浏览器中)返回以下内容:

匹配{path:://:email”,url://reset pass”,isExact:true,参数:{email:“reset pass”}
位置{pathname:“/reset pass”,搜索:“?email=anything”,散列:“,状态:undefined}

我希望我解释的一切都是正确的。

你们的陈述看起来很一致。在上面的示例中,您使用3000作为服务器,但在底部,您说您在4001上运行节点。。?你在说什么?我在
localhost:3000上运行视图,因为我使用的是React,所以要运行不会干扰应用程序视图的服务器,我在另一个端口上运行服务器(我已经在package.json中设置了代理来正确操作它。我提到了
,因为如果问题是通过手动删除
来解决的。不幸的是,它返回
未定义的
。对我来说很有效。但是为什么会发生这种情况呢?文档使用
请求参数
我不想使用
express.Router()因为当我试图按照你的建议制作一些东西时,
router.get('/reset pass',function(req,res){console.log(req.url);console.log(req.query);})
我收到一个错误:
gethttp://localhost:4001/reset-通过404(未找到)
另外,我也不知道我还应该在代码中签入什么……我是个新手。可能它连接到了运行服务器的另一个端口,而不是客户端视图?它给出了与app.get(…)相同的结果,没关系,不介意路由器。在路由中,不要忘记返回某些内容。您可以使用res.send()或res.json()因为如果您不以响应(res)的形式返回某些内容,可能是另一个问题。请在console.logs之后尝试在函数内部执行操作,也可以如您所说检查您的端口。您启动了express server的哪个端口,然后向该端口请求。