导入模块,库函数出错
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()
}, [])
}
我目前正在使用 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()
}, [])
}