问题描述
我的项目(MongoDB,Express,Reactjs,Node.Js)遇到此问题。即使我已经浏览了StackOverflow上的所有类似问题,我仍然在Internet上进行了搜索。我发布问题的原因是我无法理解之前关注的问题的内容。由于我是新手,所以调试起来很费劲........
我正在使用jswonwebtoken
进行用户身份验证,而没有令牌,用户无法访问来自任何特定HTTP Request
的数据,我正在使用Postman
登录并成功分配了令牌,当我运行时一个router.get
请求Postman
成功获取了所有数据,但另一方面,如果我在浏览器中运行了相同的请求,它会说access denied
,在我的情况下,当用户不在时会弹出该请求已验证。 (奇怪!)。...然后抛出下面提到的错误。
这是我的堆栈跟踪.....:
服务器在端口:5000 [0](节点:35420)上运行弃用警告: 当前的服务器发现和监视引擎已弃用,并将 在将来的版本中删除。使用新的服务器发现和 监控引擎,将选项{useUnifiedTopology:true}传递给 MongoClient构造函数。 [0]已连接到数据库。...!啊哈[0]错误 [ERR_HTTP_HEADERS_SENT]:将标头发送到 ServerResponse.setHeader上的客户端[0](_http_outgoing.js:518:11) ServerResponse.header(C:\ Users \ Ahmed中的[0] Faraz \ Desktop \ test \ node_modules \ express \ lib \ response.js:771:10)[0]
在ServerResponse.send(C:\ Users \ Ahmed Faraz \ Desktop \ test \ node_modules \ express \ lib \ response.js:170:12)[0]
在auth(C:\ Users \ Ahmed Faraz \ Desktop \ test \ server \ routes \ verifyToken.js:12:25)[0]位于 Layer.handle [作为handle_request](C:\ Users \ Ahmed Faraz \ Desktop \ test \ node_modules \ express \ lib \ router \ layer.js:95:5)[0] 在下一个(C:\ Users \ Ahmed Faraz \ Desktop \ test \ node_modules \ express \ lib \ router \ route.js:137:13) [0]在Route.dispatch(C:\ Users \ Ahmed Faraz \ Desktop \ test \ node_modules \ express \ lib \ router \ route.js:112:3)[0] 在Layer.handle [作为handle_request](C:\ Users \ Ahmed Faraz \ Desktop \ test \ node_modules \ express \ lib \ router \ layer.js:95:5)[0] 位于C:\ Users \ Ahmed Faraz \ Desktop \ test \ node_modules \ express \ lib \ router \ index.js:281:22 [0] 在Function.process_params(C:\ Users \ Ahmed Faraz \ Desktop \ test \ node_modules \ express \ lib \ router \ index.js:335:12) 下一步[0](C:\ Users \ Ahmed Faraz \ Desktop \ test \ node_modules \ express \ lib \ router \ index.js:275:10) [0]在Function.handle(C:\ Users \ Ahmed Faraz \ Desktop \ test \ node_modules \ express \ lib \ router \ index.js:174:3)[0] 在路由器(C:\ Users \ Ahmed Faraz \ Desktop \ test \ node_modules \ express \ lib \ router \ index.js:47:12)[0] 在Layer.handle [作为handle_request](C:\ Users \ Ahmed Faraz \ Desktop \ test \ node_modules \ express \ lib \ router \ layer.js:95:5)[0] 在trim_prefix(C:\ Users \ Ahmed Faraz \ Desktop \ test \ node_modules \ express \ lib \ router \ index.js:317:13) [0]位于C:\ Users \ Ahmed Faraz \ Desktop \ test \ node_modules \ express \ lib \ router \ index.js:284:7
这是我的posts.js代码:
const express = require('express')
const router = express.Router();
const Post = require('../models/Post');
const verify = require('./verifyToken');
// All Posts
router.get('/',verify,(req,res) =>{
Post.find({},function(err,result) {
if (!err) {
console.log('Response from controller',result);
return res.send(result);
}
});
})
// Submits a Post
router.post('/',async (req,res) =>{
const post = new Post({
title: req.body.title,description: req.body.description
})
try {
const savedPost = await post.save()
return res.json(savedPost);
} catch (err) {
return res.json({message: err})
}
})
我不知道它是否必须执行用户身份验证... 这是我的auth.js代码...
const router = require('express').Router();
const bcrypt = require('bcryptjs')
const User = require('../models/User');
const {registerValidation,loginValidation} = require('../validation');
const jwt = require('jsonwebtoken');
router.post('/register',res) =>{
// Validation here
const {error} = registerValidation(req.body);
if (error) res.status(400).send(error.details[0].message);
const emailExists = await User.findOne({email: req.body.email});
if(emailExists) res.status(400).send('Email Already Exists');
const salt = await bcrypt.genSalt(10);
const hashedPassword = await bcrypt.hash(req.body.password,salt);
const user = new User({
name:req.body.name,email:req.body.email,password:hashedPassword
})
try {
const savedUser = await user.save();
return res.send(savedUser);
} catch (error) {
return res.status(400).send(error);
}
})
router.post('/login',res)=>{
//Validation Here
const {error} = loginValidation(req.body);
if (error) return res.status(400).send(error.details[0].message);
const user = await User.findOne({email: req.body.email});
if(!user) return res.status(400).send('Email or password is wrong');
//Password is Correct
const validPass = await bcrypt.compare(req.body.password,user.password);
if(!validPass) return res.status(400).send('Invalid password');
const token = jwt.sign({_id: user._id},~mySecretKey);
return res.header('auth-token',token).send(token);
//res.send('logged in');
})
module.exports = router;
最后,这是我的app.js文件(服务器);
const express = require('express'); const app = express();
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const authRoute = require('./routes/auth');
const postRoute = require('./routes/posts');
app.use(bodyParser.json());
mongoose.connect('mongoURI',{useNewUrlParser: true},() =>{
console.log('Connected To DB....!Aha')
})
app.use(express.json())
app.use('/posts',postRoute);
app.use('/api/user',authRoute);
app.listen(5000,()=>{
console.log(`Server running on Port:5000`) });
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)