我是node的新手,我正在构建rest node API。我正在使用express for HTTP和JWT进行身份验证。每当我使用标题'x-auth'请求/ node / me时。 它给出了下面给出的错误。我在/ node / me中设置了中间件 哪个查询mogodb数据库。它找到用户使用标题'x-auth'
server.js:
var a = [1,2];
var b = [3,4];
var c = [5,6,7];
var d = [...a, ...b, ...c];
// resulting array will be like d = [1,2,3,4,5,6,7]
authenticate.js:
var env = process.env.NODE_ENV || 'development';
if(env==="development"){
process.env.PORT = 3000;
process.env.MONGODB_URI = 'mongodb://localhost:27017/TodoApp';
}else if(env==="test"){
process.env.PORT = 3000;
process.env.MONGODB_URI = 'mongodb://localhost:27017/TodoAppTest';
}
var _ = require('lodash');
var express = require('express');
var bodyParser = require('body-parser');
var {ObjectID} = require('mongodb');
var app = express();
var {mongoose} = require('./db/mongoose');
var {Todo} = require('./models/todo');
var {User} = require('./models/user');
const {authenticate} = require('./middleware/authenticate');
const bcrypt = require('bcryptjs');
const port = process.env.PORT;
app.use(bodyParser.json());
app.get('/users/me',authenticate,(req,res) => {
res.send(req.user);
});
module.exports = {
app,
env
}
app.listen(port,() => {
console.log(`server is running ${port}`);
})
我收到有关标题的错误
const {User} = require('./../models/user');
var authenticate = (req,res,next) => {
var token = req.header('x-auth');
User.findByToken(token).then((doc) => {
if(!doc){
res.status(401).send('doc is not found');
}
req.token = token;
req.user = doc;
next();
}).catch((e) => {
res.status(401).send(e);
})
答案 0 :(得分:0)
您必须更改为:
if(!doc){
res.status(401).send('doc is not found');
} else {
req.token = token;
req.user = doc;
next();
}
原因是在执行if内部代码之后,如果您发送响应,则流程将独立继续,因为它只是一个函数调用。因此,您正在执行错误代码,之后您正在执行成功代码,我的意思是下一个函数,如果文档存在,并且在next()执行时,响应已被发送。
此致
答案 1 :(得分:0)
您只能使用快递发送一个回复。如果您遵循Authenticate中间件中的一系列事件,您将发现您正在发送响应:
res.status(401).send('doc is not found');
然后调用next()
。当你接下来打电话时,它会将控制权传递给下一个中间件,然后发送:
res.send(req.user);
当请求失败时,将next()
从环路中删除,例如:
if(!doc){
res.status(401).send('doc is not found');
return;
}
答案 2 :(得分:0)
您必须导出身份验证。并添加返回
if(!doc){
res.status(401).send('doc is not found');
return;
}

或添加其他
if(!doc){
res.status(401).send('doc is not found');
}
else {
req.token = token;
req.user = doc;
next();
}