导入模块,库函数出错

Importing a module, error with library functions

我目前正在使用 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

您需要将 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()
    }, [])
}