【问题标题】:Console Log URL Parameter in routes/index.jsroutes/index.js 中的控制台日志 URL 参数
【发布时间】:2017-06-22 08:49:29
【问题描述】:

我有以下网址:

http://localhost:3000/?url=test

在我的 routes/index.js 中,我很喜欢 url 参数并尝试 console.log:

var express = require('express');
var router = express.Router();

var url_param;

router.get('/:url', function (req, res) {
    var url_param = req.params.url;

});
var url;
var url = url_param
console.log(url);

但是它没有记录任何东西。在我的终端中,我得到它正确执行 GET 功能:

GET /?url=test 304 4.169 ms - -

我错过了什么吗?

谢谢!

【问题讨论】:

  • router.get 行之前定义url_param,它将在该块之外用于记录。
  • @mjw 对不起,应该提到这一点,我正在这样做。
  • 您绝对不会在您发布的代码中这样做。请发布包含问题的代码,以便我们正确诊断问题。
  • 是的,正如@mjw 所说,请发布实际代码...但是,一些额外的也不会受到伤害 - 例如,什么是“路由器”?我不想做出不正确的假设...

标签: javascript express console.log


【解决方案1】:

(我猜这会起作用。)尝试在你的函数中编写你的console.log。喜欢

router.get('/:url', function (req, res) {
var url_param = req.params.url;
console.log(/* your code */ );
});

【讨论】:

  • 问题是,我需要在函数之外使用那个 var (url_param)。
  • @ChrisOlson 您正在将function 传递给router.get(),当资源被请求时,该函数将在未来的某个任意时间点执行。任何需要运行的代码都必须进入该函数。
  • 您将“url_param”重新声明为函数内的新变量。去掉函数内部“url_param”前面的var,以寻址外部作用域中的“url_param”。
【解决方案2】:

以下是如何存储该值并在其他地方使用它:

var express = require('express');
var router = express.Router();

var url;

// http://localhost:3000/url
router.get('/url', function(req, res) {
  res.send("the stored url is " + url);
});

// http://localhost:3000/?url=x
router.get('/:url', function(req, res) {
  url = req.params.url;
  console.log(url);
  res.send("url stored");
});

【讨论】:

    【解决方案3】:
    1. 将 console.log() 移到 route.get 函数中。
    2. 即使您必须移动 console.log();已经在您的路由器函数中,您声明了一个不同的变量 var url_param,因此它们没有相同的引用。

    为什么它不能在 route.get 函数之外工作?

    在您运行“node thisfile.js”的那一刻,脚本上的所有内容都将被处理,但是 router.get 函数将等待接收一个事件,该事件只有在访问 url 时才会触发。

    因此,如果 router.get 函数没有接收到事件 url_param 仍然未定义。因此,要获取 url 参数,您需要访问它匹配的 url。

        var express = require('express');
        var router = express.Router();
        var url_param;
        router.get('/:url', function (req, res) {
            url_param = req.params.url;
            console.log(url_param);//TO BE HONEST This will work
        });
    console.log(url_param);//TO BE HONEST THIS WOULDNT WORK
    

    【讨论】:

    • @ChrisOlson 你如何测试这个?你访问的是 router.get 匹配的 url 吗?
    猜你喜欢
    • 2019-07-09
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多