如何在环回中间件上制作类似远程方法的东西?

时间:2017-10-20 08:27:05

标签: node.js loopbackjs loopback

在休假代码中,我想在remote method middleware loopback上发布submitForm() { let headers = new Headers( { 'Content-Type': 'application/json', 'Accept': 'application/json' }); let options = new RequestOptions({ headers: headers }); let data = JSON.stringify({ Value1: this.form.value1, Value2: this.form.value2, Value3: this.form.value3 }); console.log(data); let url = 'http://localhost:3000/calculate'; console.log(url); return new Promise((resolve, reject) => { this.http.post(url, data, options) .toPromise() .then((response) => { console.log('API Response : ', response.status); resolve(response.json()); }) .catch((error) => { console.error('API Error : ', error.status); console.error('API Error : ', JSON.stringify(error)); reject(error.json()); }); }); } 之类的内容,以便发布值来计算,例如: 在app中:

remote method

并且在module.exports = function () { accepts: [{arg: 'val1', type: 'number'},{arg: 'val2', type: 'number'}], returns: {arg: val1+val2, type: 'number'}, http: {path: '/calculate', verb: 'get'} }); }; 或类似的东西中,我使用了这样的代码,但完全失败了:

SELECT numberofemployees "Employees (D&B)" from account; 

2 个答案:

答案 0 :(得分:3)

我正确使用的远程方法示例

module.exports = function (TeamRole) {
      TeamRole.getUsers = function (id, cb) {
        TeamRole.find({
          where: {
            teamId: id
          }
        }, function (err, users) {
          cb(null, users);
        });
      };

      TeamRole.remoteMethod('getUsers', {
        accepts: {
          arg: "id",
          type: "string",
          required: true
        },
        returns: {
          arg: 'users',
          type: 'Array'
        },
        http: {
          path: '/:id/users',
          verb: 'get'
        }
      });
}

如上例所示,您可以正确定义远程方法以实现任务。

欢呼声。

答案 1 :(得分:1)

这是我解决问题的方法:

正如您所看到的,URL上没有显示任何参数,我认为这可能是安全的我不是专家,但我想帮助您:

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