我刚接触Node.js,遇到了一些问题。 我正在为学习目的在应用程序上工作,但我遇到了这个问题 错误:将标头发送到客户端后无法呈现。 我不知道如何使它工作
C:\ Users \ GameDev \ Desktop \ Portfolio \ reciepe \ node_modules \ mysql \ lib \ protocol \ 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 \ Desktop \ Portfolio \ reciepe \ models \ orm.js:9:9) 在查询。 (C:\ Users \ GameDev \ Desktop \ Portfolio \ 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)
SQL错误: 代码:“ ER_PARSE_ERROR”, errno:1064, sqlMessage: “您的SQL语法有误;检查与您的MariaDB服务器版本相对应的手册,以在\'NULL附近使用正确的语法, \'dqdd \'\'在第一行', sqlState:“ 42000”, 索引:0, sql: 'INSERT INTO authentication(username,password)VALUES NULL,\'dqdd \''}
这是数据库
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 ?";
con.query(sqlQuery, [values],function (err, data) {
if (err) {
console.log(err)
cb(err, null);
} else {
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: values.username,
password:values.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'))
我可以知道我的代码有什么问题吗?
答案 0 :(得分:0)
问题出在您的orm
文件中。那里的回调被调用了两次(以防err
为真/有一个值),依次又调用了res.json
两次。尝试更改以下内容
con.query(sqlQuery, [values],function (err, data) {
if (err) {
cb(err, null);
} else {
cb(null, data);
}
});