【问题标题】:Where to save data in express.js app other than database?除了数据库,在 express.js 应用程序中的哪里保存数据?
【发布时间】:2021-01-29 01:15:39
【问题描述】:

我正在页面上显示一个链接,我想通过使用表单来更改该链接。

我应该在哪里保存该链接并检索以呈现除了数据库之外的页面?

*我认为在这么小的任务中涉及数据库的性能效率不高。


我能做的就是把它作为一个字符串保存在一个全局变量中,这样我就可以访问它并更改它。

但是在生产中使用全局变量来完成这样的任务是一个好习惯吗?

【问题讨论】:

  • 我认为这是不好的做法,然后您需要在表单提交上修改文件,以更改变量,以便每次刷新时都会对文件进行修改。如果你问我,你需要一个数据库。
  • 为了帮助您,我们需要了解更多。您是在尝试更改某个特定用户的链接,就在他们的页面中,还是尝试为使用您的 Web 服务器的所有用户更改该链接的所有实例?那么,您在什么情况下尝试更改链接以及您希望它持续多长时间?这是什么,您可以使用客户端 Javascript 更改一次,还是需要影响从服务器为该用户呈现的所有未来页面?
  • @jfriend00 回答您所有的问题=> 您是否尝试为使用您的网络服务器的所有用户更改该链接的所有实例? : 是的。 |您在什么情况下尝试更改链接以及您希望它持续多长时间? :我想使用仅在管理员用户登录时可用的表单来更改它(我已经使用护照实现了用户管理,所以这不是问题)并且不会经常更改(可能每 7 天)。 |

标签: node.js express


【解决方案1】:

好的,既然我们知道这是您希望影响所有用户的更改,那么全局或最好是模块级变量或模块共享对象上的属性就可以了。

如果您希望此更改保持不变并在服务器重新启动后继续存在,那么您需要将更改写入磁盘的某个位置,并使用代码在服务器重新启动时从磁盘读回该设置。一种简单的方法可能是将其读/写到 JSON 格式的文件中。这为您提供了简单的扩展性,还可以在该文件中包含其他设置。

然后您的管理表单可以更新此变量并触发将所有当前设置保存到磁盘。

【讨论】:

    【解决方案2】:

    我相信您要实施哪种方法实际上取决于场景,例如更改链接的频率,阅读频率等。一些建议:

    1. 如果不同的用户想要查看和更新​​同一个链接而不影响其他用户,您可以使用在客户端存储的 cookie。这样您就不需要数据库,但每个用户都将管理自己的链接,其他人无法访问。
    2. 您可以使用文件,例如json 或简单的文本文件,并使用内置的fs 来读取和写入该文件。但是,在这种情况下,您可能希望使用同步操作来避免并发问题,例如const contents = fs.readFileSync('storage.txt', 'utf8');
    3. 当然,您也可以将数据存储在字符串中,但是如果服务器出现故障,链接将不会持续存在。

    【讨论】:

    • 您提到的第一种方法不是我需要的,因为该链接对于所有用户都是相同的。我没有在我的问题中提到,但我已经实现了提到的第二种方法,但是当我提交带有新数据的表单时,它工作正常,即文件的数据发生了变化,但是,当我重定向(在文件操作之后)用户到页面时卡住(页面加载部分)或无法加载,但是当我手动刷新它之后它工作正常。所以很烦人。
    猜你喜欢
    • 2021-03-21
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 2022-11-11
    • 2017-04-02
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    相关资源
    最近更新 更多