Sayuri Mizuguchi
Sayuri Mizuguchi

Reputation: 5330

call server-side REST function from client-side

In the case, on the server side have some archive restApi.js with REST functions. My REST functions works fine, i test with Prompt Command.

In my client side have some archive index.ejs, And I want to call with this file.

My restApi.js: Server-side

var Client = require('./lib/node-rest-client').Client;
var client = new Client();  


var dataLogin = {
   data: { "userName":"xxxxx","password":"xxxxxxxxxx","platform":"xxxx" },
   headers: { "Content-Type": "application/json" }
};

var numberOrigin = 350;

client.registerMethod("postMethod", "xxxxxxxxxxxxxxxxxx/services/login", "POST");

client.methods.postMethod(dataLogin, function (data, response) {
   // parsed response body as js object
   // console.log(data);
   // raw response
    if(Buffer.isBuffer(data)){
      data = data.toString('utf8');
      console.log(data);
      re = /(sessionID: )([^,}]*)/g;
      match = re.exec(data);
      var sessionid = match[2]
      console.log(sessionid);
      openRequest(sessionid, numberOrigin);  // execute fine
    }
});

function openRequest(sessionid, numberOrigin){
  numberOrigin+=1;
   var dataRequest = {
   data: {"sessionID":sessionid,"synchronize":false,"sourceRequest":{"numberOrigin":numberOrigin,"type":"R","description":"Test - DHC","userID":"xxxxxxxxxx","contact":{"name":"Sayuri Mizuguchi","phoneNumber":"xxxxxxxxxx","email":"xxxxxxxxxxxxxxxxxx","department":"IT Bimodal"},"contractID":"1","service":{"code":"504","name":"Deve","category":{"name":"Developers"}}} },
   headers: { "Content-Type": "application/json" }
   };
   client.post("xxxxxxxxxxxxxxxxxxxxxxxxx/services/request/create", dataRequest, function (data, response) {
   // parsed response body as js object
   // console.log(data);
   // raw response
   console.log(data);
   });
}

My index.ejs: Client side

<html>
<head> ------------- some codes
</head>
<meta ------- /> 
<body>
<script>
function send() {
        $.ajax({
            type: "POST",
            url: "restApi.js",
            data: '{ sendData: "ok" }',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (result) { 
            alert("successful!" + result.d);
            }
        });
    }
</script>
<script src="restApi.js"></script>
</body>    
</html>

I've try see others examples but does not work (Ajax). And I need to know how to solved this, if have other Best practice for it, please let me knows.

In my console (Chrome) show if I call the ajax function: enter image description here

SyntaxError: Unexpected token s in JSON at position 2
   at JSON.parse (<anonymous>)
   at parse (C:\xxxxxxxxxxxxxxxxxxxxxxxxx\node_modules\body-parser\lib\types\json.js:88:17)
   at C:\xxxxxxxxxxxxxxxxxxxxxxxxx\node_modules\body-parser\lib\read.js:116:18

And if I click (BAD Request) show: Obs.: Same error than app.js, but app.js works fine.

Cannot GET /restApi.js

In the case the file restApi.js Is a folder behind the index.

Folder:

Obs.: public folder have the index.ejs

enter image description here

Upvotes: 1

Views: 1143

Answers (4)

Janatbek
Janatbek

Reputation: 465

Your problem is bad url. In case if you have fiule structure like this you have to point as shown in image Point your Url like this ../restapi.js

Upvotes: 1

Janatbek
Janatbek

Reputation: 465

Try this now...

function send() {
  var obj = { 
    sendData : "ok" 
  };
  $.ajax({
      type: "POST",
      url: "Your url",
      data: obj,
      dataType: "json",
      success: function (result) { 
        alert("successful!" + result.d);
      },
      error: function (error) { 
        console.log("error is",  error); // let us know what error you wil get.
      },
  });
 }

Upvotes: 1

Janatbek
Janatbek

Reputation: 465

Your url is not pointing to js/restapi js. and what code do you have in js/restapi js? if your action page is app js you have to put it in url. url:'js/restapi.js',

Upvotes: 0

Chetan
Chetan

Reputation: 6891

Based on the error I think the data you are posting via AJAX is not in correct syntax.

Change function send() as following.

function send() {
    var obj = { "sendData" : "ok" };
    $.ajax({
        type: "POST",
        url: "restApi.js",
        data: obj,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (result) { 
        alert("successful!" + result.d);
        }
    });
}

This should resolve the error you are facing.

Upvotes: 1

Related Questions