Как я могу отправить сокет конкретному клиенту в каждом запросе API в экспресс-маршруте - PullRequest
0 голосов
/ 13 февраля 2019

Я запрашиваю циклы к API, где я использую данные из первого запроса, чтобы сделать другой запрос.Когда закончите последний запрос, я хочу отправить данные во внешний интерфейс, а затем конкретному пользователю.Я попытался req.app.io.to (scoketID) .emit но его не работает.Есть способ отправить сообщение определенному клиенту на внешнем интерфейсе с помощью экспресс-маршрута?

server.js

var server = https.createServer(httpOptions, app);
var io = require('socket.io')(server);
app.io = io;
  io.once('connection', function(socket){
  console.log("connected")
  socket.on("disconnect",function(){    
    socket.disconnect();
  });
});

results.js

const auth = require("../services/auth");
const rp = require("request-promise")
exports.get = async(req, res, next)=>{
    var i= 0;
    var x = 0;
    const buyerName = []
    const itemID = []
    res.render("sales",{username: data.name})

        rp("URI 1") // VERY FIRST GET AND CALL LOOP
        .then(body => {
            callNext(body)
        })
        .catch(e => {
            console.log(e)
        })


    function callNext(body) {
        let responseJSON = JSON.parse(body);
        if (x>=responseJSON.results.length) { // VERIFY LOOP INDEX TO CALL END FUNCTION
            reqProductsEnd();
        } else {
            rp("URI 2")
            .then(data =>{
                const order = JSON.parse(data)
                buyerName.push(order.buyer.nickname)
                reqProducts(body)
            })
            .catch(e=>{
                console.log(+e)
            })

        }
    }

    function reqProducts(body) {
            rp("URI 3",{
                data: x++
            })
            .then(data =>{
                const item = JSON.parse(data)
                itemID.push(item.thumbnail)
                console.log(i)
                console.log(productName[i])
                i++;
                callNext(body) // CALL LOOP AGAIN
            })
            .catch(e=>{
                console.log(e)
            })       
}
    function reqProductsEnd() {
        console.log(itemID)
        console.log(buyerName)
        req.app.io.to(`${req.app.socket}`).emit('receive item', {buyer: buyerName[i], itemID: itemID[i]}); //this is how i tried, but req.app.socket i've removed app.socket = socket on server's connection. 

    }   
}

view.ejs

$(function () {
var socket = io.connect('https://localhost:3000', { forceNew: true });
socket.on('receive item', function(msg){
    var x = JSON.stringify(msg);
    $("div").append(msg.buyerName);
});
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...