我目前正在使用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
上。
据我了解,尝试从浏览器调用函数时会发生这种情况,因为这会带来安全风险。但是,据我了解,所有节点操作都是在服务器端执行的,对吧?当在提供页面之前查询数据库时,为什么会得到此标志?我需要做些什么修改?
答案 0 :(得分:3)
React在浏览器中运行,因此只要在您的React应用程序中包含database.js
,它就会与其他React一起在浏览器中运行,因此,您当然会得到错误。进行这项工作有两个选择:
暴露Node的API端点供React调用,该API端点调用database.js,或者,
研究React的服务器端渲染,其中一些React应用(尤其是它的一些更静态的部分,如主菜单)在Node端创建,只有最终的HTML发送到浏览器。 (不过,这本身就是一个很大的话题。)
在您的示例中,该示例采用了SQL的日期参数,我猜想#2不是一个选择。