【问题标题】:Calling Function from Nodejs at Client side: require is not defined在客户端从 Nodejs 调用函数:未定义要求
【发布时间】:2020-08-26 01:07:32
【问题描述】:

我知道有一些类似的问题问这个问题。但是,我没有找到解决我的问题的方法。我在我的项目中使用 svelte 和 nodejs。我正在从服务器端获取 JSON 文件,并希望使用 require 在客户端调用该函数。下面是我在服务器端的代码。

DataService.js

const fetch = require('node-fetch')

let data;
;(async ()=>{
    const res = await fetch('http://localhost:3000/api/tables.json');
    data = await res.json();
    // console.log(data);
})()

export const getTable = () => {
    console.log(data);
    return data;
    // console.log(data);
}

当我尝试从客户端调用 getTable() 时,错误提示“未定义要求”。我从各种答案中了解到,要求仅适用于服务器端而不是客户端。提到我使用的一些解决方案考虑使用,Script,commonjs,browersify 等等。

这是我的客户端代码。

目录.svelte

<script >
import {getTable} from '../components/dataservice.js';

console.log(getTable()); //gives an error of require is not defined


</script>

<h1>Table</h1>

如果我从 Dataservice.js 中删除“const fetch = require('node-fetch')”,它会给我 undefined 并且 fetch 未定义。

任何帮助都将不胜感激,因为我已经努力解决这个问题好几天了。

【问题讨论】:

  • 您无法在客户端上运行 Node.js。您应该将 DataService.js 编写为客户端脚本或服务器脚本并在之间查询信息
  • 你使用像 Webpack、rollup 或 parcel 这样的打包工具吗?
  • 我在我的苗条项目中有汇总

标签: node.js json server client svelte


【解决方案1】:

这应该可行:

const fetch = typeof window !== 'undefined'
  ? window.fetch
  : require('node-fetch');

【讨论】:

  • 哇它好用!谢谢!只是检查这是否适用于其他需要方法?例如 const uniqBy = require('lodash.uniqby');将其更改为喜欢 const uniqBy = typeof window !== 'undefined' ? window.uniqBy : 需要('lodash.uniqby') ?
  • 没有。它之所以有效,是因为 fetch 已经存在于浏览器上下文中; uniqBy 没有。一般来说,你应该使用import(如果你想在这里这样做,你可以使用类似npmjs.com/package/isomorphic-unfetch的同构提取库)
猜你喜欢
  • 2018-05-10
  • 2012-01-07
  • 2019-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2018-10-20
  • 2013-10-04
相关资源
最近更新 更多