node.js - 快速 webapp 上的 Passport.js 身份验证错误“一旦已发送就无法设置标头”
问题描述
嗨,我正在制作一个连接到我的大学提供的远程数据库上的 mysql 服务器的快速 webapp。我正在按照教程设置 passport.js 身份验证,但在尝试发布 /regnew 请求时的数据时遇到了问题
腻子中出现的错误是:
错误:/students/danu7_tc3/project/views/error.hbs:发送后无法设置标题。在 validateHeader (_http_outgoing.js:491:11) 在 ServerResponse.setHeader (_http_outgoing.js:498:3) 在 ServerResponse.header (/students/danu7_tc3/project/node_modules/express/lib/response.js:767:10)在 ServerResponse.send (/students/danu7_tc3/project/node_modules/express/lib/response.js:170:12) 在完成 (/students/danu7_tc3/project/node_modules/express/lib/response.js:1004:10)在 /students/danu7_tc3/project/node_modules/hbs/lib/hbs.js:93:9 在 Object.done (/students/danu7_tc3/project/node_modules/hbs/lib/async.js:74:20) 在 /students /danu7_tc3/project/node_modules/hbs/lib/hbs.js:88:18 at /students/danu7_tc3/project/node_modules/hbs/lib/hbs.js:69:11 at Object.done (/students/danu7_tc3/project /node_modules/hbs/lib/async.
这是我的 index.js 代码
var express = require('express');
var router = express.Router();
var passport = require('passport');
var bcrypt = require('bcrypt');
const saltRounds = 10;
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', {
title: 'Express'
});
});
router.get('/home', function(req, res, next) {
res.render('home', {
title: 'Home'
});
});
router.get('/registration', function(req, res, next) {
res.render('registration');
});
router.post('/regnew', function(req, res, next) {
var username = req.body.username;
var email = req.body.email;
var password = req.body.password;
console.log(username);
const db = require('./db_connection.js');
bcrypt.hash(password, saltRounds, function(err, hash) {
db.query('INSERT INTO Users (username, email, password) VALUES
( ? , ? , ? )
',[username,email,hash], function(error,result,fields) {
if (error) throw error;
db.query('SELECT LAST_INSERT_ID() as user_id', function(error,
results, fields) {
if (error) throw error;
const user_id = results[0];
console.log(results[0]);
req.login(user_id, function(err) {
res.redirect('/home');
});
});
res.render('registration', {
title: 'Success'
});
});
});
});
passport.serializeUser(function(user_id, done) { //store user id in
session
done(null, user_id);
});
passport.deserializeUser(function(id, done) { //read from the session
done(err, user_id);
});
module.exports = router;
解决方案
你打res
了两次电话。
res.redirect
res.render
推荐阅读
- android - 如何使用正则表达式从字符串中删除字符串和特殊字符并仅显示不带逗号的数字?
- android - Android Material Chip Margin Top 什么都不做
- javascript - 在 ng-class 中使用多个或嵌套三元运算符的最佳方法是什么?
- python-3.x - 为什么最后一个列表给出 NONEwhen 追加 dit 到它
- amazon-web-services - 将 AWS EC2 指标发送到 AWS Elasticsearch Service 域以在 Kibana 中进行监控
- r - ggplot图中圆圈上的线
- laravel - 我的表单没有将图像文件提交到控制器存储功能,这是什么问题
- python - 如何在 python docx 中检测列表的样式(项目符号或编号)?
- apache-kafka - Kafka Streams GlobalKTable 主题是否需要与它将加入的 KStream 主题相同数量的分区?
- c++ - 如何检测 C++ 中的组合键输入?