2017-10-07 2 views
0

Ich möchte benutzerdefinierte API verwenden, um Daten auszuwerten, die durch Anwendungen gebucht werden, aber Remote-Methoden sind nicht in Middleware in LoopbackPOST Daten für die Auswertung in Middleware in Loopback?

module.exports = function() { 
    const http = require('https'); 
    var request = require('request'); 
    var { Lib } = require('Lib'); 
    var lib = new Lib; 

    verification.checkID = function (ID, cb) { 
    cb(null, 'ID is :' + ID); 
    } 

    verification.remoteMethod('greet', { 
    accepts: { 
     arg: 'ID', 
     type: 'string' 
    }, 
    returns: { 
     arg: 'OK', 
     type: 'string' 
    } 
    }); 
+1

so wollen Sie wie ein Abfangjäger eine benutzerdefinierte Methode oder einen Haken schaffen für alle Post-Anfragen –

+0

@RahulSingh ich einige tatsächlich haben Modelle, die nicht öffentlich sind, und ich möchte "CRUD" Operationen über diese Modelle durch Hinzufügen von Middleware-Phase haben. – EramSa

+1

Sie können eine Remotemethode verwenden und sich an den Modellen beteiligen, die nicht öffentlich sind und alle Operationen dort ausführen. Warum haben Sie eine Middleware-Methode? –

Antwort

0

Bezug auf Frage fallowing How to make a simple API for post method?

ich meine Lösung in Brache Weg finden:

module.exports = function(server) { 
     const https = require('https'); 
     var request = require('request'); 

    return function verification(req, res, next) { 
     res.setHeader('Access-Control-Allow-Origin', '*'); 
     res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE'); 
     res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); 
     res.setHeader('Access-Control-Allow-Credentials', true); 
      var request; 
      var response; 
      var body = ''; 
      // When a chunk of data arrives. 
      req.on('data', function (chunk) { 
       // Append it. 
       body += chunk; 
      }); 
      // When finished with data. 
      req.on('end', function() { 
       // Show what just arrived if POST. 
       if (req.method === 'POST') { 
        console.log(body); 
       } 
       // Which method? 
       switch (req.method) { 
        case 'GET': 
         Verify url and respond with appropriate data. 
         handleGet(req, res); 
         Response has already been sent. 
         response = ''; 
         break; 
        case 'POST': 
         // Verify JSON request and respond with stringified JSON response. 
         response = handlePost(body); 
         break; 
        default: 
         response = JSON.stringify({ 'error': 'Not A POST' }); 
         break; 
       } 
       // Send the response if not empty. 
       if (response.length !== 0) { 
        res.write(response); 
        res.end(); 
       } 
       // Paranoid clear of the 'body'. Seems to work without 
       // this, but I don't trust it... 
       body = ''; 
      }); 
      // If error. 
      req.on('error', function (err) { 
       res.write(JSON.stringify({ 'error': err.message })); 
       res.end(); 
      }); 
      // 
     }; 
     function handlePost(body) { 
      var response = ''; 
      var obj = JSON.parse(body); 
      // Error if no 'fcn' property. 
      if (obj['fcn'] === 'undefined') { 
       return JSON.stringify({ 'error': 'Request method missing' }); 
      } 
      // Which function. 
      switch (obj['fcn']) { 
       // Calculate() requres 3 arguments. 
       case 'verification': 
        // Error if no arguments. 
        if ((obj['arg'] === 'undefined') || (obj['arg'].length !== 3)) { 
         response = JSON.stringify({ 'error': 'Arguments missing' }); 
         break; 
        } 
        // Return with response from method. 
        response = verification(obj['arg']); 
        break; 
       default: 
        response = JSON.stringify({ 'error': 'Unknown function' }); 
        break; 
      } 
      return response; 
     }; 
     function verification(arg) { 
      var n1 = Number(arg[0]); 
      var n2 = Number(arg[1]); 
      var n3 = Number(arg[2]); 
      var result; 
      // Addem up. 
      result = n1 + n2 + n3; 
      // Return with JSON string. 
      return JSON.stringify({ 'result': result }); 
     }; 
     }; 
1
module.exports = function() { 
    const http = require('https'); 
    var request = require('request'); 
    var { Lib } = require('Lib'); 
    var lib = new Lib; 

    verification.checkID = function (ID, cb) { 
    cb(null, 'ID is :' + ID); 
    } 

    verification.remoteMethod('greet', { 
    'http': { // add the verb here 
     'path': '/greet', 
     'verb': 'post' 
    }, 
    accepts: { 
     arg: 'ID', 
     type: 'string' 
    }, 
    returns: { 
     arg: 'OK', 
     type: 'string' 
    } 
    }); 

aktualisieren

module.exports = function(server) { 
    // Install a `/` route that returns server status 
    var router = server.loopback.Router(); 
    router.get('/', server.loopback.status()); 

    router.get('/ping', function(req, res) { // your middle ware function now you need to call the next() here 
    res.send('pong'); 
    }); 

    server.use(router); 
}; 

Um etwas zu bewerten akzeptiert Ich bekomme keine Bitte überprüfen Sie auch diesen Link zu Intercepting error handling with loopback

+0

Ich bin appriciated für Ihre Aufmerksamkeit. das funktioniert nicht. Vor allem sollte Middleware Parameter akzeptieren, die ich von App aus posten und dann an das private Modell senden. Mein Problem ist im ersten Teil. Ich kann nicht aus Apps posten (dann auf Konsole um zu überprüfen). – EramSa

+0

@EramSa Sie möchten eine Middleware-Methode schreiben, die eine Express-Methode ist, ist einfach in Server/root.js –

+0

Aktualisierte Antwort bitte überprüfen –

Verwandte Themen