首页 > 解决方案 > Node.js Socket.io Ionic Nginx - 配置错误?

问题描述

我是套接字和 nginx 的新手,我想做的是使用套接字来发布订单。

使用我目前的配置,API 工作正常(我可以毫无问题地获取和发送数据),但是当我发送订单(使用套接字的路由)时,服务器似乎没有收到 json。

Using: 
 - Server CentOS 7.
 - nginx version: nginx/1.16.1
 - MongoDB 4.2
 - Node 12.13.1

在本地运行它没有问题,因为我不使用 Nginx。

/etc/nginx/conf.d/my-domain.conf我有这个:

server {
        listen          80;
        server_name     xx.xx.xx.xxx;

        location /socket.io/ {
                proxy_http_version 1.1;

                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";

                proxy_pass "http://localhost:8080/socket.io/";
        }

        location / {
                proxy_pass "http://localhost:8080/";
        }

        error_page 404 /404.html;
                location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
                location = /50x.html {
        }
}

============================= 服务器端:================== =========

服务器.js

const port = process.env.PORT || 8080;

http.listen(port, () => {
  console.log('linstening on port:', port);
});

sockets.js

io.on('connection', function (socket) {    
    socket.on('post-order', function (order) {

        orderDAO.post(order, function (err, ord) {
            if(err) return console.log('Error:', err);
            io.emit('post-order', ord);
        }

    });
});

order.js

app.post('/api/v1/orders', function (req, res) {

    let order= req.body;

    orderDAO.post(order, function (err, ord) {
        if (err) {
            res.send({'err': err});
        } else {
            res.json(ord);
        }
    });
});

orderDAO.js

function OrdersDAO(db) {

    let ObjectId = require('mongodb').ObjectID;
    let database = db.db('app_habb');
    let orders= database.collection('orders')

    this.post = function (order, callback) {

        orders.insertOne(order, function (err, result) {
            if (err) return callback(err, null);
            return callback(null, result.ops[0]);
        });

    }
}

============================ 客户端:================== =========

生成订单.ts

import { Socket } from 'ngx-socket-io';

constructor(private socket: Socket) { }

ngOnInit() {
    this.socket.connect();

    this.socket.on('post-order', (data) => {  // receives nothing
        console.log(data);
    });
}

sendOrder() {
    // Validation code..
    // ...

    // then:
    this.socket.emit("post-order", this.order);
}

我正在尝试的可能吗?我的意思是我正在通过套接字发送一个json。

如果这是可能的,出了什么问题?

我提出请求时没有收到任何错误。

标签: node.jssocketsnginxionic-framework

解决方案


推荐阅读