如何在js中轻松制作受保护的变量?

Posted

技术标签:

【中文标题】如何在js中轻松制作受保护的变量?【英文标题】:How to easily make protected variable in js? 【发布时间】:2021-09-17 22:48:43 【问题描述】:

我用它从某个站点获取数据:

const key = 'secret_key';

router.get('/get', (req, res) => 
  axios.get(url, 
    headers: 
      'Key': key,
    
  )
    .then(response => 
      res.send(response)
    )
    .catch(error => res.status(500).send(error))
);

当出现错误时,key 对用户可见。我想使用受保护的或私有的,但我不能。在其他问题中,有很长很复杂的函数来保护变量。最简单的方法是什么?

【问题讨论】:

“对用户可见”是什么意思?任何人都可以打开 devtools 并查看代码中的任何数据。你唯一能做的就是打乱你的代码,让它很难阅读,但它不会隐藏数据。您只能“保护”您的变量免受在同一页面上执行的其他脚本的影响,而不是用户。 @vanowm 有没有其他方法可以让它不可见?还是只有这个?如果它是私有或受保护的变量,它不会改变任何东西吗? @Weronika 这看起来像 NodeJS。是吗?如果是这样,那么请这样标记问题。 (在这种情况下,该值不会通过浏览器 DevTools 可见。) @Weronika 我指的是 vanowm 的 cmets。该用户可以访问发送到用户浏览器的所有代码/html/javascript,并且可以查看/更改。在 NodeJS 服务器上运行的 JavaScript 在服务器上执行,不会发送到用户的浏览器。因此,用户将无法获取此值(除非出现您所说的错误)。 @Weronika 我对 NodeJS 不够熟悉,无法保证任何事情,所以不要相信我的话,但这确实有道理。 .send(error) 可能会将错误发送给用户,因此他们能够准确地看到出了什么问题。这类信息对开发人员很有用,但您不想告诉外界他们需要知道的更多信息。 (通常您想将一些信息写入日志文件,以便以后可以访问这些信息,但我不确定它在 NodeJS 中是如何工作的。 【参考方案1】:

感谢@Ivar,以另一种方式解决。

之前:

 .catch(error => res.status(500).send(error))

之后:

 .catch(error => res.status(500).send("Internal Server Error"))

【讨论】:

以上是关于如何在js中轻松制作受保护的变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift 中声明一个“受保护”变量

如何使伴随对象中的变量受保护

如何在子类中访问超类的“受保护的静态”变量,子类位于不同的包中......?

如何影响派生类中受保护的基变量

如何在同一个类的静态方法中访问类的受保护变量?

c++,如何创建线程受限/受保护的变量和函数?