因此,我目前正在使用Request NPM模块。

request( URL, function (error, response, body) {
    console.log(body);
    var bod = JSON.parse(body);
    console.log(bod.url);
});

我想在EJS文件中利用bod.url参数。

console.log(bod.url)部分工作正常,并且可以完全打印出我正在寻找的内容。

我正在寻找做以下事情。
request( URL, function (error, response, body) {
    console.log(body);
    var bod = JSON.parse(body);
    console.log(bod.url);
    var bod2 = bod.url;
});


res.render("image",{url:bod2});

但一直说bod2是未定义的。

如果我将bod2设置为request函数之外的变量,那么我的EJS tempalte会正确呈现它。

我知道我缺少一些基本知识,但是我看不到我要去哪里。

更新

如果我执行以下操作,则可以正常工作……但这是路线内部的不良做法吗?
request( URL, function (error, response, body) {
    console.log(body);
    var bod = JSON.parse(body);
    console.log(bod.url);
    var bod2 = bod.url;
    res.render("image",{url:bod2});
});

最佳答案

由于变量的作用域,有时会出现此问题。
因此,您可以使用以下代码来处理此类情况。

request( URL, function (error, response, body) {
    console.log(body);
    var bod = JSON.parse(body);
    console.log(bod.url);
    var bod2 = bod.url;
    res.render("image",{url:bod2});
});

或者,您可以在请求块上方将bod2声明为
var bod2;
return new Promise(resolve => {
   request( URL, function (error, response, body) {
      console.log(body);
      var bod = JSON.parse(body);
      console.log(bod.url);
      this.bod2 = bod.url;

   }, function (error, response, body) {
      if(!error)
         resolve(body);
   });

10-07 19:25