【问题标题】:Extracting the URL from the query string从查询字符串中提取 URL
【发布时间】:2017-01-27 09:16:10
【问题描述】:

考虑这样的网址:

http://some-site.com/something/http://www.some-other-site.com

我正在尝试使用以下方法将查询字符串中的 bold 部分(即第二个 http://)登录到控制台。

app.get("/something/:qstr",function(req,res){

    console.log(req.params.qstr);   
};

但是,这只会在 http: --> 遇到 // 时才起作用,它不再包含在 req.params.qstr 中我想知道如何获取整个 URL 字符串。我怎样才能做到这一点?

谢谢。

【问题讨论】:

  • 这不是一个有效的 URL;路径中的 URL 组件必须是 URL encoded. 这可能是它不适合您的原因。您从哪里获得这些数据?
  • 我想要完成的是将第二个 URL 保存到我的数据库中,每当它在某些内容之后输入时,我试图提取该部分并保存到我的数据库中。
  • 但是为什么您会收到以这种破坏方式构造的 URL?
  • 这是我正在做的一个项目,您可以在其中访问我的网站,即 some-site.com 导航到 /something/ 路由... 输入正确格式的 URL,一旦输入它将保存到数据库。你知道如何在这里提取网址吗?
  • 使用表达式:/something/:qstr(.*)

标签: node.js url express query-string


【解决方案1】:

你可以试试这个,使用正则表达式:

var app = require('express')();

app.get(/^\/something\/(.*)/, function (req, res) {

    console.log(req.params[0]);
    res.json({ok: true});

});

app.listen(3333, () => console.log('Listening on 3333'));

当你运行时:

curl http://localhost:3333/something/http://www.some-other-site.com

服务器打印:

http://www.some-other-site.com

如你所愿。

res.json({ok: true}); 只是为了返回一些响应,因此curl 不会永远挂起。

【讨论】:

  • 你可以把 res.json 改成 res.send() 你会得到 200 的回报
  • 这解决了谢谢。你能快速解释一下正则表达式吗?它只是说在斜线之后抓住一切,对吧?
  • 如果我做 app.get() 它会工作但是如果用 app.use 做同样的事情它不会。 app.use(/\/new\/(.*)/, 错误); - error.js --> router.get("/",function(req,res){ console.log(req.params[0]) res.send(req.params[0]) });请指教
  • @JohnNoob 我将正则表达式更新为/^\/something\/(.*)/,这意味着 - 以/something/ 开头的任何内容,然后捕获为req.params[0] 的任何内容。 app.use 不同于 app.get - 请参阅:expressjs.com/en/guide/using-middleware.html
  • 是的,谢谢,我对 JS 很熟悉,但对 Node 很陌生,所以仍然在寻找解决方法。我渴望有一天能像你一样了解 Node。
猜你喜欢
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多