如何解决尝试从NextJS中的req对象读取时获取req.headers是未定义的
在页面加载时,如果本地存储中存在令牌,我会尝试触发身份验证请求。
// utils.ts
const init = async () => {
try {
const token = window.localStorage.getItem('token');
if (token) {
axios.defaults.headers.common['x-auth-token'] = token;
const { user } = await axios.get('/api/auth/load')
console.log('user!',user);
} else {
delete axios.defaults.headers.common['x-auth-token'];
}
} catch (err) {
console.log('There was an error with init: ',err);
}
}
还有我的pages/api/auth/load.ts
文件:
export default async function load(req: TLoadUserRequest,res) {
auth(req,res);
const { id } = req.user;
await connectDb();
const user = await User.findById(id);
return res.json(user);
}
问题出在我的auth.ts
内,这引发了错误,
TypeError: req.headers is not a function
这里是:
// middleware/auth.ts
import jwt from 'jsonwebtoken';
import config from 'config';
export default (req,res) => {
const token = req.headers('x-auth-token');
if (!token) return res.status(401).json({ msg: 'No token. Authorization denied.' });
try {
const decoded = jwt.verify(token,config.get('jwtSecret'));
req.user = decoded.user;
} catch (err) {
return res.status(401).json({ msg: 'Token is invalid' });
}
};
当我使用Node / Express时,没有出现此错误-NextJS的req
对象没有headers
属性吗?如何添加它,以便可以将其与axios一起使用?
解决方法
您的语法对于获取标头值有点错误。
req.headers('x-auth-token')
应该是
req.headers['x-auth-token']
,
根据文档,您应该使用req.getHeader(<headerName>)
https://nodejs.org/api/http.html#http_request_getheader_name
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。