node.js 的 Flask html 模板:未定义所需

Flask html templates with node.js: required is not defined

我正在用 python Flask

用 heroku 创建一个网站

现在我需要将 mongodb 数据库与 javascript 连接,但它显示此错误:

Uncaught ReferenceError: require is not defined
    <anonymous> http://mortis666stocksimulator.herokuapp.com/static/scripts/mongo.js:1

javascript 在我添加行

之前但之后有效
const { MongoClient } = require('mongodb');

它给了我错误。我试图解决这个问题,所以我创建了另一个构建包 (heroku/node.js)

并且在我的项目文件夹中创建了一个 package.json

这是内容:

{
    "name": "stocksimulator",
    "version": "1.0.0",
    "description": "First ever website project ",
    "author": "Mortis_666",
    "license": "MIT",
    "dependencies": {
      "mongodb": "^4.3"
    },
    "engines": {
      "node": "16.13.1"
    }
  }

还是不行
有办法解决吗?

编辑

你猜怎么着? 我试图 运行 我的 本地机器 中的烧瓶文件。 它给了我同样的错误。(即使我已经 已经安装 node.js)

但是当我 运行 单独 mongo.js 文件时,它没有给我错误! mongodb 的功能甚至可以工作!

所以这意味着现在的问题不是关于如何在heroku中安装node.js。它是关于如何在 flask

中使用 node.js

我的 javascript 文件在文件夹 static 中 我正在访问 html 文件

中的 javascript 文件
<script src="{{url_for('static', filename='scripts/mongo.js'}}"></script>

如果您想查看源代码,可以在Github

中查看

html template
javascript file
flask file

不需要 需要 JavaScript 连接到 MongoDB,您可以使用 MongoDB 从 Flask 代码直接连接到它Python driver 调用了 PyMongo

其次,任何传递到前端以便 JavaScript 可以读取的环境变量对查看您的源代码的任何人都是公开的。这是非常不安全,任何敏感值都不应该通过这种方式传递!

第三,如果您希望“刷新”按钮起作用,您不会使用 JavaScript 从浏览器直接与数据库对话。相反,最简单的做法是使用 JavaScript 触发浏览器刷新并刷新整个页面。

<button onclick="location.reload();">

但是,如果您只想重新加载页面的一部分,下一个最简单的方法是呈现“部分”。您将创建一个新的 Flask 路由,比方说 /stocks/partial,然后使用 JavaScript 和 fetch() 调用它,并且该路由只会呈现列出您的股票的模板部分.然后,您可以使用 JavaScript 查找旧股票列表在 HTML 中的位置并替换它。

最后,目前最常用的方法是调用 API。您将设置 returns JSON 数据的路由(例如 /api/stocks)。然后,您将使用 fetch() 调用该路由并获取该数据并使用 javascript 或前端模板库将数据呈现为 HTML。这就是 React 和 Vue 受欢迎的原因;它们是前端模板(和组件)系统。你用它们构建你的整个前端,你的 Flask 应用程序变成了前端调用的 API 后端。