Node.js: 通过 Unix socket 发送 GET 请求

11

我刚接触 node.js。我正在尝试使用Unix套接字建立客户端服务器连接,其中我的客户端请求将在node.js中进行,而在后台运行的服务器将是Go。

客户端代码:

    var request = require('request');

    request('http://unix:/tmp/static0.sock:/volumes/list', function (error, response, body) {
        if (!error && response.statusCode == 200) {
            console.log(body)
        } else {
            console.log("In else part of the receiver" + response.statusCode + body)
        }
    }


})

当我尝试与用Go编写的服务器通信时,它显示了“HTTP错误:400 Bad Request:malformed Host header”。

相同的内容可以正常工作:

curl -X GET --unix-socket /tmp/static0.sock http://:/volumes/list

我不确定我的请求出了什么问题。我们需要发送标题吗?我期望得到JSON响应。


https://nodejs.org/api/net.html#net_server_listen_path_backlog_callback - Adiii
请参考以下链接:https://dev59.com/EWw05IYBdhLWcg3wxUj_ - Adiii
2个回答

17

如果不使用request模块来实现这个目标,请尝试以下方法:

const http = require('http');

const options = {
  socketPath: '/tmp/static0.sock',
  path: '/volumes/list',
};

const callback = res => {
  console.log(`STATUS: ${res.statusCode}`);
  res.setEncoding('utf8');
  res.on('data', data => console.log(data));
  res.on('error', data => console.error(data));
};

const clientRequest = http.request(options, callback);
clientRequest.end();

1
const options = { socketPath: '/tmp/static0.sock', path: '/volumes/list', }; 这是我错过的关键部分。 - Nikita Kodkani
1
如何从成功响应中获取数据? - Luis Contreras

-6
考虑以下示例:

client side code : Also you can do socket connection in some code :

<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
<script>
  socket = io.connect('http://www.example.com' , {'force new connection':true});
  socket.on('event', function(){
    // code to execute
  });
</script>

Node.js 服务器端代码: 首先安装 npm,然后执行以下步骤: 1)npm init 2)npm install --save express 3)npm install --save socket

var express = require('express');
var app = express();
var http = require('http');
var server = http.createServer();
var io = require('socket.io').listen(server);
var socket = null;

io.sockets.on('connection', function(soc) {
  socket = soc;
  console.log('socket connected');
});


app.get('/test', function(request, response) {
  var message = "Hello world";
  socket.emit('event', message);
  response.writeHead(200);
  reponse.write(message);
  reponse.end();
});

var server = app.listen(8080, '0.0.0.0');

你可以通过浏览器检查此项


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接