2
votes

i'm trying to learn how to build an api with Node and Express.js. I've found the next step by step: click here

And created a very similar version but with my data:

var express = require("express");
var bodyParser = require("body-parser");
var sql = require("mssql");
var app = express();

app.use(bodyParser.json());

app.use(function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, contentType,Content-Type, Accept, Authorization");
    next();
});

 var server = app.listen(process.env.PORT || 8080, function () {
    var port = server.address().port;
    console.log("App now running on port", port);
 });

 var dbConfig = {
     user:  "myUser",
     password: "myPass",
     server: "myServer",
     database: "MyDB"
 };

var  executeQuery = function(res, query){
     sql.connect(dbConfig, function (err) {
         if (err) {
                     console.log("Error al conectarse a la base :- " + err);
                     res.send(err);
                  }
                  else {
                         // create Request object
                         var request = new sql.Request();
                         // query to the database
                         request.query(query, function (err, res) {
                           if (err) {
                                      console.log("Error al correr query en la base :- " + err);
                                      res.send(err);
                                     }
                                     else {
                                       res.send(res);
                                            }
                               });
                       }
      });
}

//GET API
app.get("/api/ApiRequestData", function(req, res){
                var query = "select * from [RequestData]";
                executeQuery (res, query);
});

After create the server.js doc, executed with npm install and run with node server.js, i opened on postman using the next url: http://localhost:8080/api/ApiRequestData and get an error message: "Could not get any response". On the Node command prompt i get the message:

TypeError: res.send is not a function at C:\Users\API\server.js:43:44 at C:\Users\API\node_modules\mssql\lib\main.js:1588:20 at Request.userCallback (C:\Users\API\node_modules\mssql\lib\tedious.js:853:61) at Request.callback (C:\Users\API\node_modules\tedious\lib\request.js:33:27) at Connection.message (C:\Users\API\node_modules\tedious\lib\connection.js:1179:27) at Connection.dispatchEvent (C:\Users\API\node_modules\tedious\lib\connection.js:519:45) at MessageIO. (C:\Users\API\node_modules\tedious\lib\connection.js:439:23) at emitNone (events.js:106:13) at MessageIO.emit (events.js:208:7) at ReadablePacketStream. (C:\Users\API\node_modules\tedious\lib\message-io.js:92:15)

Someone knows why shows this message?

Hope you can help me.

2

2 Answers

5
votes

You are shadowing res from line var executeQuery = function(res, query){... with res from line request.query(query, function (err, res) {.... Just rename the last res to something else and you won't get this error:

request.query(query, function (err, result) {
  if (err) {
    console.log("Error al correr query en la base :- " + err);
    res.send(err);
  }
  else {
    res.send(result);
  }
});
0
votes

You can use below query for fetching the records with hard coded query like. I used same for my application.

sql.connect(config).then(() => {
    return sql.query`select * from [dbo].[Customer]`
}).then(result => {
    console.log(result)
}).catch(err => {
    console.log(err);
})

Fetch the result using store procedure.

sql.connect(config).then(pool => {
    return pool.request().input('Customerid', sql.Int, 2).execute("GetCustomerbyId")
}).then(result => {
    console.log(result)
}).catch(err => {
    console.log(err);
})