3

I'm having trouble to post form data from my html file into MySQL. I keep getting a syntax error on the server response and the data does not save on the MySQL database. I have posted the code and error below. I'm struggling to resolve this issue.

Error in server response

TypeError: this._callback.apply is not a function at Query.Sequence.end

index.html

<form action="/" method="post">
    <input id="name" type="text" name="name" placeholder="Type your name...">
    <input id="message" type="text" name="message" placeholder="Type message...">
    <input class="submit_message" type="submit" value="Send">
</form>

server.js

var express = require('express');
var app = express();
var mysql = require('mysql');
var bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({ extended: false });

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use('/', express.static(__dirname + '/'));

var connection = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "",
    database: "mywebsite"
});

connection.connect();

app.get('/',function(req,res) {
    res.sendFile(__dirname + '/index.html');
});

app.post('/', function(req, res) {
    var username = req.body.name;
    var usermessage = req.body.message;
    connection.query("INSERT INTO `users` (Name, Message) VALUES (?)", username.toString(), usermessage.toString(), function(err, result) {
        if(err) throw err;
            console.log("1 record inserted");
        });
    res.send(username + " - " + usermessage);
});

connection.end();

app.listen(3000, function () {
    console.log('Listening on port 3000');
});

1 Answer 1

1

When using placeholder values in connection.query, they must be an array of values or an object. But you're passing each value as a different argument, and one of them is being used as the callback parameter, that's why you get that error.

.query(sqlString, values, callback)

Use this instead:

connection.query("INSERT INTO `users` (Name, Message) VALUES (?,?)", [username.toString(), usermessage.toString()], function(err, result) {})

Or using named placedholders

const placeholders = { name: username.toString(), message: usermessage.toString() };

connection.query("INSERT INTO `users` (Name, Message) VALUES (:name,:message)", placeholders, function(err, result) {})
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.