1

I'm currently developing a chat project.. I'm using a php framework and have managed to run it on node now the problem I'm currently experiencing is that the ajax query is not working it does not send a single data to my database.. the script that I used is perfectly working because I used this script when I was still using a long-polling of ajax for a chat app... It just didnt work now when I used it on the new chat app using node that I was developing... Here is my index.php

<?php startblock('script') ?>
    <script src="/socket.io/socket.io.js"></script>
    <script src="http://code.jquery.com/jquery-1.11.1.js"></script>
    <script>
        var socket = io();
        $('form').submit(function(){
            socket.emit('chat message', $('#m').val());
            $('#m').val('');
            return false;
        });
        socket.on('chat message', function(msg){
            var data2 = { text: msg };

            $.ajax({
                url: 'localhost:3000/includes/message/store_chat.php',
                dataType: 'json',
                type: 'POST',
                data: {json:JSON.stringify(data2)},
                success: function (data2) {  }
            });
        });
    </script>

    <script>
        jQuery(function ($) {
            $(window).on("resize", function () {
                body      = $("html,body"),
                menu      = $("#side-menu").width(),
                gridW     = body.width() - (menu + 30),
                gridH     = body.height();

                $("#message-app-wrapper").css("height", gridH);
                $("#views-wrapper").css("width", gridW);
            }).resize();
        });
    </script>
<?php endblock(); ?>

And this is the database handler

<?php

//Send some headers to keep the user's browser from caching the response.
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); 
header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" ); 
header("Cache-Control: no-cache, must-revalidate" ); 
header("Pragma: no-cache" );
header("Content-Type: text/plain; charset=utf-8");

$json2 = $_POST['json'];
$data = json_decode($json2);

$text = $data->text;

$con = new PDO("mysql:host=localhost:3000;dbname=schat", "root" , "");
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

$sql2 = "INSERT INTO chat_storage(chat) VALUES(:msg)";
$stmt2 = $con->prepare($sql2);
$stmt2->bindValue( 'msg',$text, PDO::PARAM_STR);
$stmt2->execute();
?>

The index.js is here:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var validator;

function getStdout(command, args, fn) {
    var childProcess = require('child_process').spawn(command, args);
    var output = '';
    childProcess.stdout.setEncoding('utf8');
    childProcess.stdout.on('data', function(data) {
        output += data;
    });
    childProcess.on('close', function() {
        fn(output);
    });
}

app.use('/assets', require('express').static(__dirname + '/assets'));
app.use('/temp', require('express').static(__dirname + '/temp'));
app.use('/includes/message', require('express').static(__dirname + '/includes/message'));
app.get('/', function(req, res) {
    //res.sendfile(__dirname + '/' +validator);
    res.send(validator);
});

//you should have only one io.on('connection')
io.on('connection', function(socket) {
    socket.on('chat message', function(msg){
        console.log('message: ' + msg);
        io.emit('chat message', msg);
    });
});

getStdout('php', ['index.php'], function(output) {
    validator = output;
    //start your server after you get an output
    http.listen(3000, function() {
        console.log(validator);
    });
});

These are what I have so far. For some reason it wont' store to my database I don't know if I did something wrong here or have missed to add something.

3
  • Why are you using 2 server-side languages ? NodeJs can also perform mysql queries, I guess it would be easier for you to adapt it : github.com/felixge/node-mysql Commented Aug 3, 2014 at 13:30
  • Why are you using both socket.io and ajax? why are you using both Node.js and PHP? I think you're over-complicating this... Commented Aug 3, 2014 at 14:16
  • @AnthonyGarcia The reason why I'm using both node and php is because I'm using a php based framework.. or are there any other work arounds for me to use the design framework that are on php format? Commented Aug 3, 2014 at 23:04

1 Answer 1

2

Try talking directly to mysql within node.js. Also good to create a new username instead of logging as root to mysql. Here's a code snippet, with some comments:-

var mysql =  require('mysql'); // run: npm install mysql
var http = require('http');
var express = require('express');
var app = express();

var connection =  mysql.createConnection({ // setup the connection
        host : "localhost",
        user : "username",
        password: "password",
})

connection.connect(function(err) { // connect and handle errors
  if(err) {  
   // handle your errors here 
  }
}); // end .connect()

app.get('/path/:msg', function(req,res){ // process incoming message
  res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' })

  var myMsg= req.params.msg; // obtain the incoming msg
  var strQuery = "INSERT INTO chat_storage(chat) VALUES(?)"; // your SQL string

  connection.query("use schat"); // select the db
  connection.query( strQuery, myMsg, function(err, rows){
     if(err) {
        // handle errors
     } else {
        // message received
     }
   }); end .query()
}); // end app.get()
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.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.