Post Request express:将标头发送到客户端后无法设置标头
我对Node.js相当陌生,遇到了一些问题。我正在为学习目的而开发应用程序,但我遇到了这个问题错误:将标头发送到客户端后无法呈现。我不知道如何使它工作
C:\用户\ GameDev \桌面\组合\ reciepe \ node_modules \ MySQL的\ lib中\协议\ Parser.js:437抛出错误//抛出非MySQL错误^错误[ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后无法设置标头在ServerResponse.setHeader(_http_outgoing.js:470:11)在ServerResponse.header(C:\ Users \ GameDev \ Desktop \ Portfolio \ reciepe \ node_modules \ express \ lib \ response.js:771:10)在ServerResponse.send(C:\ Users \ GameDev \ Desktop \ Portfolio \ reciepe \ node_modules \ express \ lib \ response.js:170:12)在ServerResponse.json(C:\ Users \ GameDev \ Desktop \ Portfolio \ reciepe \ node_modules \ express \ lib \ response.js:267:15)在C:\ Users \ GameDev \ Desktop \ Portfolio \ reciepe \ routes \ route.js:32:20在查询。 (C:\ Users \用户GameDev \桌面\组合\ reciepe \模型\ orm.js:9:9)在查询。 (C:\ Users \用户GameDev \桌面\组合\ reciepe \ node_modules \ MySQL的\ lib中\ Connection.js:525:10)在Query._callback(C:\ Users \ GameDev \ Desktop \ Portfolio \ reciepe \ node_modules \ mysql \ lib \ Connection.js:491:16)在Query.Sequence.end(C:\ Users \ GameDev \ Desktop \ Portfolio \ reciepe \ node_modules \ mysql \ lib \ protocol \ sequences \ Sequence.js:83:24)在Query.ErrorPacket(C:\ Users \ GameDev \ Desktop \ Portfolio \ reciepe \ node_modules \ mysql \ lib \ protocol \ sequences \ Query.js:90:8)
这里是数据库
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "",
database:'reciepeapp'
});
module.exports = con
ORM
const con = require('./db')
const orm = {
insertOne: function (values, cb) {
const sqlQuery = `INSERT INTO authentication(username,password) VALUES('${username}')`;
con.query(sqlQuery, [values],function (err, data) {
if (err) cb(err, null);
cb(null, data);
});
},
}
module.exports = orm;
这是route.js
const express = require('express');
const app = express()
const router = express.Router()
const bcrypt = require('bcrypt');
bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));
const orm = require('../models/orm')
router.get('/',(req,res)=>
res.render('home')
)
router.get('/login',(req,res)=>
res.render('login')
)
router.get('/register',(req,res)=>
res.render('register')
)
router.post("/register", function (req, res) {
values = [
username = req.body.username,
password = req.body.password
];
orm.insertOne(values, function(error) {
if (error) {
return res.status(401).json({
message: 'Not able to add'
});
}
return res.json({
username: username,
password:password
});
});
});
module.exports = router
index.js
const express = require('express');
const app = express()
const bodyParser = require("body-parser");
const indexRouter = require('./routes/route')
const con = require('./models/db')
con.connect(function(err) {
if (err) {
return console.error('error: ' + err.message);
}
console.log('Connected to the MySQL server.');
});
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
var exphbs = require('express-handlebars');
console.log(__dirname)
app.use('/',express.static(__dirname + '/public'));
app.engine('handlebars', exphbs());
app.set('view engine', 'handlebars');
app.use('/',indexRouter)
const PORT = 5000;
app.listen(PORT,()=>console.log('it started on 5000'))
我可以知道我的代码有什么问题吗?
回答如下:问题出在您的orm
文件中。在那里,回调被调用两次(以防万一err
为真/有一个值),然后依次调用两次res.json
。尝试更改以下内容
con.query(sqlQuery, [values],function (err, data) {
if (err) {
cb(err, null);
} else {
cb(null, data);
}
});
Post Request express:将标头发送到客户端后无法设置标头
我对Node.js相当陌生,遇到了一些问题。我正在为学习目的而开发应用程序,但我遇到了这个问题错误:将标头发送到客户端后无法呈现。我不知道如何使它工作
C:\用户\ GameDev \桌面\组合\ reciepe \ node_modules \ MySQL的\ lib中\协议\ Parser.js:437抛出错误//抛出非MySQL错误^错误[ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后无法设置标头在ServerResponse.setHeader(_http_outgoing.js:470:11)在ServerResponse.header(C:\ Users \ GameDev \ Desktop \ Portfolio \ reciepe \ node_modules \ express \ lib \ response.js:771:10)在ServerResponse.send(C:\ Users \ GameDev \ Desktop \ Portfolio \ reciepe \ node_modules \ express \ lib \ response.js:170:12)在ServerResponse.json(C:\ Users \ GameDev \ Desktop \ Portfolio \ reciepe \ node_modules \ express \ lib \ response.js:267:15)在C:\ Users \ GameDev \ Desktop \ Portfolio \ reciepe \ routes \ route.js:32:20在查询。 (C:\ Users \用户GameDev \桌面\组合\ reciepe \模型\ orm.js:9:9)在查询。 (C:\ Users \用户GameDev \桌面\组合\ reciepe \ node_modules \ MySQL的\ lib中\ Connection.js:525:10)在Query._callback(C:\ Users \ GameDev \ Desktop \ Portfolio \ reciepe \ node_modules \ mysql \ lib \ Connection.js:491:16)在Query.Sequence.end(C:\ Users \ GameDev \ Desktop \ Portfolio \ reciepe \ node_modules \ mysql \ lib \ protocol \ sequences \ Sequence.js:83:24)在Query.ErrorPacket(C:\ Users \ GameDev \ Desktop \ Portfolio \ reciepe \ node_modules \ mysql \ lib \ protocol \ sequences \ Query.js:90:8)
这里是数据库
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "",
database:'reciepeapp'
});
module.exports = con
ORM
const con = require('./db')
const orm = {
insertOne: function (values, cb) {
const sqlQuery = `INSERT INTO authentication(username,password) VALUES('${username}')`;
con.query(sqlQuery, [values],function (err, data) {
if (err) cb(err, null);
cb(null, data);
});
},
}
module.exports = orm;
这是route.js
const express = require('express');
const app = express()
const router = express.Router()
const bcrypt = require('bcrypt');
bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));
const orm = require('../models/orm')
router.get('/',(req,res)=>
res.render('home')
)
router.get('/login',(req,res)=>
res.render('login')
)
router.get('/register',(req,res)=>
res.render('register')
)
router.post("/register", function (req, res) {
values = [
username = req.body.username,
password = req.body.password
];
orm.insertOne(values, function(error) {
if (error) {
return res.status(401).json({
message: 'Not able to add'
});
}
return res.json({
username: username,
password:password
});
});
});
module.exports = router
index.js
const express = require('express');
const app = express()
const bodyParser = require("body-parser");
const indexRouter = require('./routes/route')
const con = require('./models/db')
con.connect(function(err) {
if (err) {
return console.error('error: ' + err.message);
}
console.log('Connected to the MySQL server.');
});
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
var exphbs = require('express-handlebars');
console.log(__dirname)
app.use('/',express.static(__dirname + '/public'));
app.engine('handlebars', exphbs());
app.set('view engine', 'handlebars');
app.use('/',indexRouter)
const PORT = 5000;
app.listen(PORT,()=>console.log('it started on 5000'))
我可以知道我的代码有什么问题吗?
回答如下:问题出在您的orm
文件中。在那里,回调被调用两次(以防万一err
为真/有一个值),然后依次调用两次res.json
。尝试更改以下内容
con.query(sqlQuery, [values],function (err, data) {
if (err) {
cb(err, null);
} else {
cb(null, data);
}
});