最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Post Request express:将标头发送到客户端后无法设置标头

IT培训 admin 11浏览 0评论

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);
    }
});
发布评论

评论列表 (0)

  1. 暂无评论