Search code examples
node.jssql-serverajaxpostconnection

Why I Fail to AJAX post in Nodejs-msnodesqlv8 app?


I am using msnodesqlv8 package in Nodejs to connect to a SQL server database. Of course I installed the package and I already had a SQL database on a server. I used the required options for connection and succeeeded in retrieving records. To start with, My app.post code is:

const express=require('express');
const app=express();
const sql = require('msnodesqlv8');
const bodyParser = require('body-parser');


const connString="Driver={SQL Server Native Client 11.0};Server=myserver;Database=myDB;Uid=muUid;Pwd=myPwd;" 


app.post('/persons',  (req, res) => {
   const formData = req.body;
    try {
        console.log("Posting"); 
        // Create a new person record in the database
        const query=`INSERT INTO persons (name, age, gender) VALUES (${formData.name}, ${  
        formData.age}, ${formData.gender})`;
        console.log(`${formData.name}, ${formData.age}, ${formData.gender} will be written.`);
        sql.query(connString, query,(err,rows)=>{
        
        res.send(rows);
    });  
      
    } catch (err) {
      
      res.send(err);
    }
  });

HTML code:

<form id="newRecform"> 
                <div class="row">
                  <div class="form-group col-md-6">      
                    <label for="name">Name:</label>
                    <input class="form-control" type="text" name="name" id="name" required>
                  </div>
                  <div class="form-group col-md-2">
                    <label for="age">Age:</label>
                    <input class="form-control" type="number" name="age" id="age" required>
                  </div>
                </div>
                <div class="row">
                    <div class="form-group col-md-4">
                      <label for="gender">Gender:</label>
                      <select class="form-control" name="gender" id="gender" required>
                        <option value="">-- Select gender --</option>
                        <option value="Male">Male</option>
                        <option value="Female">Female</option>
                        <option value="Other">Other</option>
                      </select>
                    </div> 
                 </div>   
                <br><br><br>
                <button class="btn btn-info btn-sm col-md-2" style="border-radius: 3px;" type="submit">Add Patient</button>
                </form>`

AJAX post code:

$("#newRecform").on("submit", function (e) {
              e.preventDefault();
              $.ajax({
                  url: 'http://localhost:5001/persons',
                  type: 'POST',
                  data: $(this).serialize() ,
                  success: function (data) {
                      alert('New Record added successfully!')
                  }
                  , error: function (jqXHR, textStatus, err) {
                      alert('Error ' + textStatus + ', err ' + err)
                  }
              });
        });

When I submit the form, it never executes the app.post. Even the 'console.log' command does not work inside the post code


Solution

  • I found the answer modify app.post code to:

    app.post('/patients',  (req, res) => {
        const formData = req.body;
        const query = 'INSERT INTO persons(name, age, gender) VALUES (?, ?, ?)';
        const params = [`${formData.name}`, `${formData.age}`, `${formData.gender}`];
        sql.query(connString, query, params, (err, rows) => {
        if (err) {
            console.error(err);
        } else {
            console.log('Rows affected:', rows);
        }
        });