【问题标题】:call server-side REST function from client-side从客户端调用服务器端 REST 函数
【发布时间】:2017-06-27 18:51:00
【问题描述】:

在这种情况下,在服务器端有一些存档restApi.jsREST 功能。我的 REST 函数工作正常,我使用 Prompt Command 进行测试。

在我的客户端有一些存档index.ejs,我想用这个文件调用。

我的 restApi.js: 服务器端

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);
   });
}

我的 index.ejs: 客户端

<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>

我尝试查看其他示例但不起作用(Ajax)。 我需要知道如何解决这个问题,如果有其他最佳实践,请告诉我。

在我的控制台 (Chrome) 中显示我是否调用了 ajax 函数:

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

如果我点击 (BAD Request) 显示: Obs.:与 app.js 相同的错误,但 app.js 工作正常。

Cannot GET /restApi.js

如果文件 restApi.js 是索引后面的文件夹。

文件夹:

Obs.: public 文件夹有 index.ejs

【问题讨论】:

  • "但不起作用" 什么不起作用?它怎么不起作用?您是否看到任何错误或异常?您注意到什么意外行为?
  • 真的很抱歉,我编辑
  • 您是否将预期的数据发送到 api ?它是否期望一个只有一个属性“sendData”的对象?我已经发布了基于此的答案。
  • 我会试试的,等一下
  • 在 Chrome 控制台中?你能粘贴错误吗?

标签: ajax node.js rest


【解决方案1】:

您的问题是错误的网址。如果您有这样的文件结构,您必须如图所示指向

【讨论】:

  • 是的,我试过了,但有同样的错误..错误是{"readyState":4,"responseText":"Cannot POST /restApi.js\n","status":404,"statusText":"Not Found"}
  • 文件在服务器端。但它应该工作,对吧?如果我的 app.js 工作并与客户端交互... +1 寻求帮助:)
  • 具体发送什么方法?
  • 如果要调用restApi文件中的函数
【解决方案2】:

基于错误,我认为您通过 AJAX 发布的数据的语法不正确。

如下更改function send()

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);
        }
    });
}

这应该可以解决您面临的错误。

【讨论】:

    【解决方案3】:

    现在试试这个...

    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.
          },
      });
     }
    

    【讨论】:

    • 错误是{"readyState":4,"responseText":"Cannot POST /restApi.js\n","status":404,"statusText":"Not Found"}
    • 再次查看我的帖子,所有代码都在 restApi 文件中。如果我使用 Prompt 命令,所有代码都可以正常工作^^
    【解决方案4】:

    您的网址未指向 js/restapi js。 你在 js/restapi js 中有什么代码? 如果您的操作页面是应用 js,则必须将其放在 url 中。 url:'js/restapi.js',

    【讨论】:

    • 如果我的存档restApi不在index文件夹之外,后面的文件夹,不是app.js,我编辑
    • 首先找到你的restapi.js文件在哪里,然后在ajax url中准确定位。
    • 您使用的是什么 IDE?在 sublime 中的 autoFileName 插件可以帮助你找到文件在哪里。
    猜你喜欢
    • 1970-01-01
    • 2015-01-10
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多