导入模块,库函数出错
Posted
技术标签:
【中文标题】导入模块,库函数出错【英文标题】:Importing a module, error with library functions 【发布时间】:2021-12-20 18:43:36 【问题描述】:我目前正在使用 NodeJS。
我正在尝试将一个模块导入到一个组件函数中,并且一切都执行得很好,但我仍然在服务器控制台中收到此错误:
error - src\modules\accountFunctions.js (15:35) @ Object.User.GetData
TypeError: _cookieCutter.default.get is not a function
cookieCutter.get 实际上是一个函数,并且按预期工作
import cookieCutter from 'cookie-cutter'
import useSelector, useDispatch from 'react-redux'
import useRouter from 'next/router'
import accountActions from '../store/account'
const Auth = require('./auth.module')
const User =
User.GetData = async () =>
const route = useRouter()
const userData = useSelector((state) => state.user)
const dispatch = useDispatch()
const sessionId = cookieCutter.get('session')
if (sessionId && userData.username === '')
const userExist = await Auth.loadUserInformation()
if (userExist.result === false)
route.push('/login')
return false
dispatch(accountActions.updateAccountInformation(userExist.data))
return true
else if (!sessionId)
route.push('/login')
return false
module.exports = User
我知道一个解决方案是将库导入函数组件,但我真的不想继续在任何地方导入它。
这就是我导入模块的方式。
import User from '../src/modules/accountFunctions'
const dashboard = () =>
console.log('Rance')
User.GetData()
return <NavBar />
export default dashboard
【问题讨论】:
此外,随着节点版本的推进,这种 CommonJS ESM 兼容性会定期获得更多选项。你运行的是什么版本的nodejs?这是 v12 中的 discussion of options,显然在 v14 中添加了更多内容。 这不起作用,但很奇怪,因为该功能确实有效,我可以打印它和所有内容。它只是在不应该的时候打印错误。 什么版本的nodejs? 看来您在 nodejs 中没有正确使用该库。看来您必须调用cookieCutter(document)
才能获得一个对象,然后该对象上有.set()
和.get()
方法。您传递的 document
对象需要有一个带有 getter 和 setter 的 .cookie
属性,其工作方式类似于浏览器中的 document.cookie
。这在 nodejs 中似乎不是很有用,因为您必须编写一堆包装器代码才能使其工作。
仅供参考,这段代码的全部内容在这里:github.com/substack/cookie-cutter/blob/master/index.js。它的内容并不多,而且它已经 5 年没有更新了。你可以从中看出你应该如何使用它。
【参考方案1】:
您需要将 cookie 获取逻辑移动到自定义挂钩内的 useEffect
,因此它仅在客户端运行。当 Next.js 在服务器上预渲染页面时,调用 cookieCutter.get
将不起作用。
const useUserData = async () =>
const route = useRouter()
const userData = useSelector((state) => state.user)
const dispatch = useDispatch()
useEffect(() =>
const getAuthenticatedUser = async () =>
const sessionId = cookieCutter.get('session')
if (sessionId && userData.username === '')
const userExist = await Auth.loadUserInformation()
if (userExist.result === false)
route.push('/login')
dispatch(accountActions.updateAccountInformation(userExist.data))
else if (!sessionId)
route.push('/login')
getAuthenticatedUser()
, [])
【讨论】:
以上是关于导入模块,库函数出错的主要内容,如果未能解决你的问题,请参考以下文章