2016-11-03 42 views
1

我正在创建一个具有两个Web门户和节点服务器的Web应用程序。第一个门户发送HTTP请求(POST),而第二个门户网站应该显示它们。然后用户将输入一些文本并通过套接字将其发送回服务器,并将其重定向到第一个门户。我使用socket.io在第二个门户和服务器之间进行通信,而第一个通过post进行通信。我正在努力寻找一种方法来从第二个门户网站接收答案,并将答案发送回第一个答案。这是代码。NodeJS:发布请求和socket.io的组合

var app = require('express')(); 
var server = require('http').Server(app); 
var io = require('socket.io')(server); 

server.listen(5700); 

io.on('connection', function (socket) { 
    console.log("connected" + socket.id); 

}); 

app.post('/server', rawBody, function(req, res, next){ 

    var question = req.query.question; 
    io.emit('question', {data: question}); 

    io.on('answer', function(data) { 
    var body = { 
     response: "data.answer" 
    }; 

    res.json(body); 
    }); 
}); 

因为我发现io.on('answer', function(data)是不正确的。但我需要的是这样的:

io.on('answer', function(data) { 
     var body = { 
      response: "data.answer" 
     }; 

     res.json(body); 
     }); 

能否请你告诉我,我应该怎么得到答案从插座回来后接受它,发送回复回第一门户网站。

+0

这真的不适合你如何使用HTTP请求和socket.io一个良好的结构。你以不太好的方式进行混音和匹配。我没有看到任何理由甚至在这里使用socket.io。你的回答应该只是它自己的http请求。非常简单得多。 – jfriend00

回答

0

事情是这样的:

var app = require('express')(); 
var server = require('http').Server(app); 
var io = require('socket.io')(server); 

server.listen(5700); 

io.on('connection', function (socket) { 
    console.log("connected" + socket.id); 

    app.post('/server', rawBody, function(req, res, next){ 

    var question = req.query.question; 
    socket.emit('question', {data: question}); 

    }); 
    socket.on('answer', function(data) { 
    var body = { 
     response: "data.answer" 
    }; 

    res.json(body); 
    }); 

}); 
+0

你不能在'io.on('connection',...)'里放一个'app.post()'。这将为每个新的socket.io连接创建一个重复的'app.post()'处理程序。在第三个socket.io连接之后,你将有三个相同的'app.post()'处理程序。 – jfriend00