【发布时间】: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 年没有更新了。你可以从中看出你应该如何使用它。
标签: node.js reactjs next.js typeerror