如何在angular + node项目中使用socket.io

时间:2016-06-26 15:59:54

标签: angularjs node.js socket.io gulp

我是Node.js的新手,我的网站是用angular + node

编写的

我找到了一个用angular,NodeJS和socket.io编写的聊天室代码,我想将它添加到我的网站但是我遇到了麻烦。

我试图将这些功能放在GulpFile.js中但是没有用:

io.on("connection", function(socket) {..
socket.on("disconnect"...

1)放置它们的地方在哪里? 我拥有与服务器和客户端结合的所有功能。我只是不知道将功能放在服务器端的哪个位置

2 个答案:

答案 0 :(得分:1)

好的,我认为你需要首先了解服务器和前端之间的区别。所以你的服务器在NodeJS上运行,你的前端在Angular上运行。 Gulpjs与这两者无关。要了解gulp究竟做了什么,watch this。现在你要做的是使用Socket io构建一个聊天系统。你得到了代码,但现在你很困惑把它放在哪里。因此,如果我是正确的,您希望拥有一个功能,例如人们使用不同的电子邮件ID在您的网站上登录,并且他们希望彼此聊天。你如何建立这种功能。如果这确实是你的问题。请在下面评论。如果没有,请更新您的问题,以便更清楚您想要实现的目标,以便我们为您提供指导。

没有sara你没有把你的socket io代码放在gulpfile中。您必须以角度创建控制器。它需要链接到服务器。因此建立管道。 Angular ---------------节点 您需要首先建立该链接。你会怎么做? 在index.html中

然后在你的nodeJS app.js中 请执行npm install socket express --save

func tableView(tableView:UITableView, cellForRowAtIndexPath indexPath:NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier(filterCellId) as! FilterCell
    cell.slider.addTarget(self, action: #selector(FilterCell.sliderChanged(_:)), forControlEvents: .ValueChanged)

    return cell

}

完成后。 在相同的app.js中输入

var express = require('express');
var app = express();
var server = require('http').Server(app); //you don't need to require a model for this. This functionality is already built in NodeJS
var io = require('socket.io')(server);

现在在你的角度应用程序中。让事情变得简单。在你的app.js中,你给你的路线和东西。请给这家工厂。

io.emit("this_should_be_same", {
    data: {
          lat: data.lat,
          lng: data.lng
          }
});

现在你可以将它注入任何控制器,如

var ypurApp = angular.module('myApp',[]);
yourApp.factory('socket', function($rootScope) {

    var socket = io.connect('localhost:5040');

    return {
        on: function(eventName, callback) {
            socket.on(eventName, function() {
                var args = arguments;
                //console.log(args);
                $rootScope.$apply(function() {


                    callback.apply(socket, args);
                });
            });
        },
        emit: function(eventName, data, callback) {
            socket.emit(eventName, data, function() {
                var args = arguments;
                $rootScope.$apply(function() {
                    if (callback) {
                        callback.apply(socket, args);
                    }
                });
            });
        }
    };
});

这应该这样做。我知道你会怀疑地随便问我。

答案 1 :(得分:0)

从后端集成......

module.exports = (function(app){
    var server = require('http').Server(app);
    var io = require('socket.io')(server);
    io.on('connection', function(socket){
        socket.on('chat', function (data) {
            socket.broadcast.emit('newMessage', data );
            socket.broadcast.emit('onlineUser',connectedPeople);

        })
})
server.listen(3000, function () {
    console.log('connection created on port no : '+3000);
})})

//用于前端侧集成使用服务

angular.module('myApp').factory('Socket',function (socketFactory) {
return socketFactory({
ioSocket: io.connect('http://localhost:3000')
});});