避免在节点

时间:2020-09-23 17:15:21

标签: javascript node.js reactjs

我目前正在使用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的文件时,这非常完美。但是,当我尝试将其导入到我的react应用中时

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

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

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

1 个答案:

答案 0 :(得分:3)

React在浏览器中运行,因此只要在您的React应用程序中包含database.js,它就会与其他React一起在浏览器中运行,因此,您当然会得到错误。进行这项工作有两个选择:

  1. 暴露Node的API端点供React调用,该API端点调用database.js,或者,

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

在您的示例中,该示例采用了SQL的日期参数,我猜想#2不是一个选择。

相关问题