【问题标题】:Avoiding Net.createConnection errors in Node避免 Node 中的 Net.createConnection 错误
【发布时间】:2021-01-09 22:58:41
【问题描述】:

我目前正在使用 React 和 Node.js 构建应用程序

在这个应用程序中,我需要使用以下函数在我自己的服务器上查询一个数据库,该函数位于一个名为“database.js”的单独文件中

const fetchQuery = util.promisify(con.query).bind(con)

// Get all the tracks for a given date from the 
const fetchTracks = async (date) => {
  const rows = await fetchQuery("SELECT * FROM tracks WHERE playlistDate = '"+date+"'");
}

当我从命令行使用 Node 运行文件时,这非常有效。但是,当我尝试将其导入到我的反应应用程序中时

import { fetchTracks, addTracks } from '../scripts/database'

我开始在数据库文件中遇到错误,特别是在我的 fetchQuery 调用中出现Unhandled Rejection (TypeError): Net.createConnection is not a function

根据我的阅读,尝试从浏览器调用函数时会发生这种情况,因为这会带来安全风险。但是,据我了解,所有节点操作都是在服务器端执行的,对吧?当在提供页面之前查询数据库时,为什么我会得到这个标志?我需要做什么来修改这个?

【问题讨论】:

  • 你的 react 组件是在服务器端渲染的吗?如果不是,很可能您的库正在尝试在客户端执行任务
  • @DipenShah 我目前正在使用 npm 开发服务器进行开发。这不会发生在“服务器”端吗?
  • 那是服务器肯定的,但这并不意味着你正在做服务器端渲染。基本上,启用服务器端渲染的应用程序只是将纯 html 和 CSS 发送到客户端浏览器,同时在服务器端完成所有繁重的工作
  • 如果您看到这个函数调用是从浏览器发出的,这将不起作用。 Net 库仅在 node 环境中可用。
  • 这里的答案比我在 cmets 中的解释要好得多。 stackoverflow.com/questions/38005968/…

标签: javascript node.js reactjs


【解决方案1】:

React 在浏览器中运行,因此只要您在 React 应用程序中包含 database.js,它就会与 React 的其余部分一起在浏览器中运行,因此您当然会收到错误消息。完成这项工作提供了两种选择:

  1. 从 Node 公开一个 API 端点以供 React 调用,并且该 API 端点调用 database.js,或者,

  2. 研究 React 的服务器端渲染,其中一些 React 应用程序——特别是它的更静态的部分,比如你的主菜单——是在 Node 端创建的,只有最终的 HTML 被发送到浏览器。 (不过,这本身就是一个很大的话题。)

通过您的示例,该示例采用 SQL 的日期参数,我猜 #2 不是一个选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 2011-06-12
    相关资源
    最近更新 更多