繁体   English   中英

使用 Vue Axios 或使用 Express Server 连接 Microsoft Azure Machine Learning Studio API?

[英]Connect Microsoft Azure Machine Learning Studio API using Vue Axios or using Express Server?

目前我正在使用以下代码连接网络服务。 我需要使用 Vue Axios 或 Express 连接到 Microsoft Azure Machine Learning Studio Api。 有人能帮我吗。

var http = require("http");
var https = require("https");
var querystring = require("querystring");
var fs = require('fs');

function getPred(data) {
    console.log('===getPred()===');
    var dataString = JSON.stringify(data)
    var host = 'ussouthcentral.services.azureml.net'
    var path = '/workspaces/fda91d2e52b74ee2ae68b1aac4dba8b9/services/1b2f5e6f99574756a8fde751def19a0a/execute?api-version=2.0&details=true'
    var method = 'POST'
    var api_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=='
    var headers = {'Content-Type':'application/json', 'Authorization':'Bearer ' + api_key};

    var options = {
        host: host,
        port: 443,
        path: path,
        method: 'POST',
        headers: headers
    };

    console.log('data: ' + data);
    console.log('method: ' + method);
    console.log('api_key: ' + api_key);
    console.log('headers: ' + headers);
    console.log('options: ' + options);

    var reqPost = https.request(options, function (res) {
        console.log('===reqPost()===');
        console.log('StatusCode: ', res.statusCode);
        console.log('headers: ', res.headers);

        res.on('data', function(d) {
            process.stdout.write(d);
        });
    });

    // Would need more parsing out of prediction from the result
    reqPost.write(dataString);
    reqPost.end();
    reqPost.on('error', function(e){
        console.error(e);
    });
}

//Could build feature inputs from web form or RDMS. This is the new data that needs to be passed to the web service.
function buildFeatureInput(){
    console.log('===performRequest()===');
    var data = {
        "Inputs": {
            "input1": {
                "ColumnNames": ["gl10", "roc20", "uo", "ppo", "ppos", "macd", "macds", "sstok", "sstod", "pmo", "pmos", "wmpr"],
                "Values": [ [ "0", "-1.3351", "50.2268", "-0.2693", "-0.2831", "-5.5310", "-5.8120", "61.9220", "45.3998", "-0.0653", "-0.0659", "-30.3005" ], ]
            },
        },
        "GlobalParameters": {}
    }
    getPred(data);
}

function send404Reponse(response) {
    response.writeHead(404, {"Context-Type": "text/plain"});
    response.write("Error 404: Page not Found!");
    response.end();
}

function onRequest(request, response) {
    if(request.method == 'GET' && request.url == '/' ){
        response.writeHead(200, {"Context-Type": "text/plain"});
        fs.createReadStream("./index.html").pipe(response);
    }else {
        send404Reponse(response);
    }
}

http.createServer(onRequest).listen(8050);
console.log("Server is now running on port 8050");
buildFeatureInput();

但是我可以通过使用 axios 调用或快速服务器来做到这一点吗?

如果我可以使用 vue axios 或 express 服务器来做到这一点,任何人都可以帮助我使用正确的语法。

这听起来像你想用express在服务器与axios在Vue的头版,而不是节点的http服务器与https在服务器端的客户端。

express替换 Node http非常简单,如下所示。

const express = require('express')
const path = require('path');
const app = express()
const port = 8050

app.use(express.static(path.join(__dirname, '.')))
app.get('/', (req, res) => res.sendFile('index.html'))

app.use(function (req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err)
})

app.use(function (err, req, res, next) {
    if(err.status == 404) {
        res.status(404).send("Error 404: Page not Found!")
    }
    res.status(500).send("Error 500: Internal Error!")
})

app.listen(port, () => console.log("Server is now running on port 8050"))

但是考虑到调用Azure机器学习工作室API的api-key值的安全性,我建议不要在Vue首页用axios调用API,还是在服务端用express调用,如下。

const axios = require('axios');

var host = 'ussouthcentral.services.azureml.net'
var path = '/workspaces/fda91d2e52b74ee2ae68b1aac4dba8b9/services/1b2f5e6f99574756a8fde751def19a0a/execute?api-version=2.0&details=true'
var api_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=='

const pred = axios.create({
  baseURL: 'https://'+host,
  timeout: 1000,
  headers: {'Content-Type':'application/json', 'Authorization':'Bearer ' + api_key}
});

app.post('/mls-api', (req, res) => pred.post(path, JSON.stringify(req.body)).then(function(resp) {
    resp.pipe(res)
    }))

然后,您可以使用以下data值从 Vue 首页调用/mls-api url。

var data = {
    "Inputs": {
        "input1": {
            "ColumnNames": ["gl10", "roc20", "uo", "ppo", "ppos", "macd", "macds", "sstok", "sstod", "pmo", "pmos", "wmpr"],
            "Values": [ [ "0", "-1.3351", "50.2268", "-0.2693", "-0.2831", "-5.5310", "-5.8120", "61.9220", "45.3998", "-0.0653", "-0.0659", "-30.3005" ], ]
        },
    },
    "GlobalParameters": {}
}

axios.post('/mls-api', data)
  .then(function (response) {
    console.log(response);
  })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM