NodeJS 由于“pg”节点模块,Remix应用程序在客户端中引发“进程未定义”错误

jbose2ul  于 2023-10-17  发布在  Node.js
关注(0)|答案(1)|浏览(109)

在我的Remix应用程序中,这也是一个Shopify应用程序,我正在使用加载器函数中的pg节点模块进行PostgreSQL查询。服务器成功执行查询并从数据库获得响应。但是,客户端抛出process is not defined错误。这是由下面的源代码中概述的pg节点模块引起的。
据我所知,服务器端模块不应该让他们的方式向客户端?
查看客户端源代码突出显示了它尝试访问user: process.platform === "win32" ? process.env.USERNAME : process.env.USER行上的process.env.USERNAME时的错误,如下所示。

// node_modules/.pnpm/[email protected]/node_modules/pg/lib/defaults.js
var require_defaults = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/pg/lib/defaults.js"(exports11, module2) {
    "use strict";
    module2.exports = {
      // database host. defaults to localhost
      host: "localhost",
      // database user's name
      user: process.platform === "win32" ? process.env.USERNAME : process.env.USER,

      // rest of source...

我的代码:

// app._index.jsx

import { authenticate } from "../shopify.server";
import { useLoaderData } from "@remix-run/react";
import { json } from "@remix-run/node";
import ShopDAO from '~/dao/shopDAO';

export const loader = async ({ request }) => {
  const auth = await authenticate.admin(request);
  const shopName = auth.session.shop;
  const data = await ShopDAO.read(shopName);

  return json(data);
};

export default function Index() {
  const data = useLoaderData();

  console.log(data)

  return (
    <p>Index</p>
  );
}
// shopDAO.js

import pool from "~/db/db";

class ShopDAO {
  async read(shopName) {
    const query = `
      SELECT * FROM shop WHERE name = $1;
    `;

    try {
      const { rows } = await pool.query(query, [shopName]);
      return rows[0];
    } catch (error) {
      console.error(`Could not read shop: ${error}`);
      throw error;
    }
  }
}

export default new ShopDAO;

我已经尝试从客户端删除useLoaderData()钩子(出于兴趣),它仍然导致相同的错误。
显然,客户端不应该接收服务器端代码。所以我要么做错了什么,要么可能做错了什么。我就是想不通。

ntjbwcob

ntjbwcob1#

是的,Remix确实会尝试从客户端包中分离出任何服务器代码。然而,根据代码的不同,它可能并不总是能够自动完成。
看着你的代码,我有一种感觉,这是由于:

// shopDA.js
import pool from "~/db/db";

将文件名更改为db.server.js,Remix将确保任何导出都只在服务器端进行。

相关问题