javascript - NodeJS - 收到错误“发送后无法设置标题”
问题描述
我是 node 新手,我正在构建 rest node API。我使用 express 进行 HTTP 和 JWT 进行身份验证。每当我使用标头“x-auth”请求 /node/me 时。它给出了下面给出的错误。我在 /node/me 中设置了查询 mogodb 数据库的中间件。它使用标头“x-auth”找到用户
server.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}`);
});
验证.js:
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);
});
我收到有关标题的此错误
Error: Can't set headers after they are sent.
at validateHeader (_http_outgoing.js:494:11)
at ServerResponse.setHeader (_http_outgoing.js:501:3)
at ServerResponse.header (C:\Users\Yash\Desktop\node-api\node_modules\express\lib\response.js:719:10)
at ServerResponse.send (C:\Users\Yash\Desktop\node-api\node_modules\express\lib\response.js:164:12)
at app.get (C:\Users\Yash\Desktop\node-api\server\server.js:254:5)
at Layer.handle [as handle_request] (C:\Users\Yash\Desktop\node-api\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\Yash\Desktop\node-api\node_modules\express\lib\router\route.js:131:13)
at User.findByToken.then (C:\Users\Yash\Desktop\node-api\server\middleware\authenticate.js:19:2)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
解决方案
您必须导出身份验证。并添加返回
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();
}
推荐阅读
- javascript - 如何使用 Javascript 中的函数加密和解密字符串
- javascript - 我得到第一个参数“电子邮件”必须是一个有效的字符串错误,而firebase身份验证反应
- python - 函数 'cv::cvtColor' 和 Cap.read()' 中的 src.empty() 未读取视频帧
- javascript - cy.readFile 和 cy.fixture 有什么区别?
- discord - 用户执行命令后,如何删除 discord.py 中的消息?
- r - 如何使用 Shiny 中的 locator() 函数在绘图上绘制多边形?
- python - 在 Python 中进行裸 os.fork() 调用的充分理由是什么?
- javascript - 如何将 Math.round 放入函数并使用户输入受限?
- ios - 使用 CoreMotion 检测手机倾斜
- python - 为什么我不能把这两个框架放在一起