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
中查看
您 不需要 需要 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 后端。
我正在用 python Flask
现在我需要将 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
我的 javascript 文件在文件夹 static
中
我正在访问 html 文件
<script src="{{url_for('static', filename='scripts/mongo.js'}}"></script>
如果您想查看源代码,可以在Github
中查看您 不需要 需要 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 后端。