2017-10-07 71 views
0

我想用自定義的API,以評估它們由應用程序發佈,但遠程方法不是在中間件中回送接受的數據如何發佈數據以評估中間件環回?

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

所以你要創建一個自定義的方法或者像你所有的post請求 –

+0

@RahulSingh其實,我有一些一個攔截器鉤不公開的模型,我想通過添加中間件階段對這些模型進行「CRUD」操作。 – EramSa

+1

您可以使用遠程方法並掛接到那些不公開的模型,並執行所有操作。爲什麼有一箇中間件的方法? –

回答

0

至於到撂荒問題How to make a simple API for post method?

我發現我在休耕的方式解決:

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

更新

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

評價是什麼我沒有得到請檢查這個鏈接太Intercepting error handling with loopback

+0

我爲你的注意appriciated。這是行不通的。首先中間件應該接受我從應用發佈的參數,然後發佈到私有模型。我的問題在第一部分。我不能從應用程序發佈(然後到控制檯檢查)。 – EramSa

+0

@EramSa你想寫一箇中間件的方法,這是一個明確的方法把簡單地在服務器/ root.js –

+0

更新的答案請檢查 –