3

Ich versuche, Beiträge meiner Freunde wie soziale Netzwerke zu bekommen. Da ich die Dinge wie "INNER JOIN" auf der Client-Seite nicht mit Easy-Tabellen verwenden kann, muss ich benutzerdefinierte API verwenden. Hier ist mein Ansatz:Azure mobile Apps benutzerdefinierte API-Ausnahme

Android-Client:

List<Pair<String, String>> params = new ArrayList<Pair<String, String>>(); 
    params.add(new Pair("id", user.getId())); 
    params.add(new Pair("otherParam", otherParam)); 

    client.getClient().invokeApi("getFeed", "POST", params, new ApiJsonOperationCallback() { 
     @Override 
     public void onCompleted(JsonElement jsonElement, Exception exception, ServiceFilterResponse response) { 
      System.out.println("exception: " + exception.toString()); 
      GsonBuilder gsonb = new GsonBuilder(); 
      Gson gson = gsonb.create(); 

      JsonArray array = jsonElement.getAsJsonArray(); 
      for (int i = 0; i < array.size(); i++) { 
       postList.add(gson.fromJson(array.get(i).getAsJsonObject().toString(), Post.class)); 
      } 
     } 
    }); 

feed.js:

var api = { 
post: (request, response, next) => { 
    var query = { 
     sql: 'SELECT * FROM Posts INNER JOIN Friends ON Posts.userId = Friends.followingId WHERE Friends.followingId = @id ORDER BY Posts.createdAt DESC', 
     parameters: [ 
      { id: 'id', otherParam: 'otherParam' } 
     ] 
    }; 

    request.azureMobile.data.execute(query) 
     .then(function (results) { 
      response.json(results); 
     }); 
    } 
}; 

module.exports = api; 

Ich bin nicht einmal sicher, ob dies eine richtige Art und Weise, es zu tun ist, oder wir können Tabellen zugreifen in einfache Tabellen wie diese, aber es gibt keine Details im Sonderdruck. Ausnahme ist "Fehler beim Verarbeiten der Anfrage". Danke im Voraus.

Antwort

2

Ihr Code ist sehr eng - es ist nur die Spezifikation von Parametern der SQL-Anweisung, die nicht ganz richtig ist. Sie müssen Parameter in folgendem Format angeben:

var query = { 
    sql: 'SELECT * FROM Posts INNER JOIN Friends ON Posts.userId = Friends.followingId WHERE Friends.followingId = @id ORDER BY Posts.createdAt DESC', 
    parameters: [ 
     { name: 'id', value: 'id' }, 
     { name: 'otherParam', value: 'otherParam' } 
    ] 
}; 

API-Referenz für diese ist bei http://azure.github.io/azure-mobile-apps-node/module-azure-mobile-apps_src_data_execute.html.

Um ein wenig mehr Debugging-Informationen aus dem Server zu bekommen, können Sie die Protokollierungsstufe erhöhen. Wenn Sie lokal ausgeführt wird, führen Sie die App mit einem zusätzlichen Befehlszeilenparameter:

node --debug app.js ---logging.level silly 

Wenn Sie auf Azure gehostet ausgeführt werden, können Sie die Protokollebene für Application Logging (Dateisystem) den Protokollstrom ausführlich und öffnen . Dies zeigt Ihnen die genauen ausgeführten SQL-Anweisungen und die Parameter.

+0

Danke, es sieht aus wie Problem gelöst. Außerdem wirkt invokeApi veraltet, ist das nicht der richtige Weg? – shanks

+0

Warum sagen Sie, dass invokeApi veraltet aussieht? –

+0

Es sieht in Android Studio veraltet aus, es funktioniert trotzdem danke. – shanks

Verwandte Themen