Возникла проблема с заполнением массива javascript - PullRequest
0 голосов
/ 21 января 2020

Я работал над проектом, который должен создать сервер node.js, и мне нужно прочитать текст из файла. Затем я хочу использовать Python API, чтобы использовать этот текст и получить результат обратно. Я смог поразить эти API и получить ответ успешно.

Что я сделал до сих пор - 1. Создан сервер узла 2. прочитать все файлы и получить текстовое содержимое из них 3. создать сервер flask с соответствующим API 4. нажмите эти API, чтобы получить ответ

приложение. js

var bodyParser = require('body-parser');
var request = require('request-promise');

var app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

app.get('/', function(req, res){
    res.send('Node server')
})

app.get('/postdatatoFlask', function (req, res) {
    var fs = require('fs');
    categories = ['business', 'entertainment']

    // answers SHOULD CONTAIN ALL THE RESPONSES FROM THE FLASK API
    var answers = []

    //iterating over different file 
    categories.forEach(function(category){

        for(var i=100;i<=100;i++){

            //creating the path for the new file to be read 
            var path = 'dataset/'+category+'/'+i.toString()+'.txt';

            //textContent contains the data read from file 
            var textContent = fs.readFileSync(path, 'utf8')

            //creating the object 
            var data = { content : textContent }

            //posting the data to the flask server on route postdata
            var options = {
                method: 'POST',
                uri: 'http://127.0.0.1:5000/postdata',
                body: data,
                json: true 
            };

            // returndata is the variable contains the data return by flask API
            var returndata
            var sendrequest = request(options)
            .then(function (parsedBody) {
                 // parsedBody contains the data sent back from the Flask server
                returndata = parsedBody;
                answers.push(returndata)
                console.log(returndata) // do something with this data, here I'm assigning it to a variable.
            })
            .catch(function (err) {
                console.log(err);
            });
        }
    })


    console.log('Showing the responses!!!')
    console.log(answers)
    console.log('Stoping the showcase!!!!')

    res.send('done');
});

app.listen(3000);

compute.py

import json
import time
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io import StringIO
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
import pandas as pd

app = Flask(__name__)

@app.route('/')
def index():
    return "Flask server"

@app.route('/postdata', methods = ['POST'])
def postdata():
    data = request.get_json()
    # print(data['content'])
    textContent = data['content']
    print(textContent)
    print('-- --- -- --- -- -- -- -- -- --')
    return json.dumps({"newdata":textContent})

if __name__ == "__main__":
    app.run(port=5000)

Проблема 1. В приложении. js Я хочу сохранить все ответы в массиве answer , но не могу его заполнить. 2. почему вывод из console.log (returndata) печатается после console.log (ответ)

Ответы [ 2 ]

1 голос
/ 21 января 2020
  1. С answers.push(returndata) вы помещаете массив в другой массив. Если вы хотите объединить содержимое от returndata до answers, используйте answers.push(...returndata)

  2. Javascript с асинхронным c, неблокирующим временем выполнения ввода-вывода, поэтому здесь:

var sendrequest = request(options)
            .then(function (parsedBody) {
                 // parsedBody contains the data sent back from the Flask server
                returndata = parsedBody;
                answers.push(returndata)
                console.log(returndata) // do something with this data, here I'm assigning it to a variable.
            })

Обратный вызов внутри then помещается в стек вызовов после следующих:

console.log('Showing the responses!!!')
    console.log(answers)
    console.log('Stoping the showcase!!!!')
0 голосов
/ 22 января 2020
var options = {
    method: 'POST',
    uri: 'http://127.0.0.1:5000/postdata',
    body: data,
    json: true 
};

// returndata is the variable contains the data return by flask API
try {
    // temp.push(await request(options));
    answers.push(await request(options));
    } catch(err) {
    throw err;
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...