2017-10-07 73 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

更新的答案请检查 –