Экспресс отправки запроса: невозможно установить заголовки после их отправки клиенту - PullRequest
0 голосов
/ 28 сентября 2019

Я довольно новичок в Node.js и у меня возникли некоторые проблемы.Я работаю над приложением в учебных целях, но столкнулся с этой проблемой. Ошибка: невозможно отрисовать заголовки после их отправки клиенту.я не знал, как заставить это работать

C: \ Users \ GameDev \ Desktop \ Portfolio \ reciepe \ node_modules \ mysql \ lib \ protocol \ Parser.js: 437 throw err;// Исправление ошибок, не связанных с MySQL ^ Ошибка [ERR_HTTP_HEADERS_SENT]: невозможно установить заголовки после их отправки клиенту по адресу ServerResponse.setHeader (_http_outgoing.js: 470: 11) по адресу ServerResponse.header (C: \ Users \ GameDev \ Desktop \Портфолио \ 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 \ rout \ route.js: 32: 20 в Query.(C: \ Users \ GameDev \ Desktop \ Portfolio \ reciepe \ models \ orm.js: 9: 9) в Query.(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 \ sequence \ Sequence.js: 83: 24) в Query.ErrorPacket (C: \ Users \ GameDev \ Desktop \ Portfolio \ reciepe \ node_modules \ mysql \ lib \ protocol \ sequence \ Query.js: 90: 8)

Ошибка SQL: код: 'ER_PARSE_ERROR', errno: 1064, sqlMessage:' В вашем синтаксисе SQL есть ошибка;проверьте руководство, соответствующее вашей версии сервера MariaDB, для правильного синтаксиса, чтобы использовать около \ 'NULL, \' dqdd \ '\' в строке 1, sqlState: '42000', индекс: 0, sql: 'INSERT INTO аутентификация (имя пользователя, пароль) 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'))

Могу ли я узнать, что не так с моим кодом?

1 Ответ

0 голосов
/ 28 сентября 2019

Проблема в вашем orm файле.Там обратный вызов вызывается дважды (в случае, если err имеет значение true / имеет значение), что, в свою очередь, вызывает res.json дважды.Попробуйте изменить ниже

con.query(sqlQuery, [values],function (err, data) {
    if (err) {
      cb(err, null);
    } else {
      cb(null, data);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...