Javascript 带有express generator的Nodejs应用程序,正在尝试添加primus websocket

Javascript 带有express generator的Nodejs应用程序,正在尝试添加primus websocket,javascript,node.js,express,primus,Javascript,Node.js,Express,Primus,我们目前正在尝试构建一个与express generator配合使用的nodejs应用程序。我目前正在尝试将Primus websocket添加到我的应用程序中。问题是,如果我不将app.listen(端口)添加到app.js文件中,我的应用程序将不会显示在localhost:3000上,即使它包含在bin/www文件中。如果我添加app.listen(端口),我的应用程序似乎找不到primus库,尽管我已将其安装到依赖项中。我不知道我的应用程序找不到primus库的问题是否与我是否添加app.

我们目前正在尝试构建一个与express generator配合使用的nodejs应用程序。我目前正在尝试将Primus websocket添加到我的应用程序中。问题是,如果我不将app.listen(端口)添加到app.js文件中,我的应用程序将不会显示在localhost:3000上,即使它包含在bin/www文件中。如果我添加app.listen(端口),我的应用程序似乎找不到primus库,尽管我已将其安装到依赖项中。我不知道我的应用程序找不到primus库的问题是否与我是否添加app.listen(端口)有关

我的app.js文件 [

var express=require('express');
var path=require('path');
var favicon=要求('serve-favicon');
var记录器=需要('morgan');
var闪存=需要(“连接闪存”);
var cookieParser=require('cookie-parser');
var会话=需要(“快速会话”);
var passport=需要(“passport”);
var策略=要求('passport-facebook')。策略;
var bodyParser=require('body-parser');
var mongoose=require('mongoose');
猫鼬mongodb://localhost/facebookusers');
var http=require(“http”);
var Primus=要求(“Primus”);
变量选项={
变压器:“engine.io”
}
var facebook=require(“./routes/facebook”);
var users=require(“./routes/users”);
变量配置文件=要求(“./路线/配置文件”);
var login=require(“./routes/login”);
var admin=require('./路由/admin');
var vote_now=要求('./路线/立即投票”);
var投票结果=要求(“./路线/投票结果”);
变量组=需要(“./路线/组”);
var endvoting=要求('./路线/endvoting');
变量角色=需要('./路由/角色');
var-app=express();
//查看引擎设置
app.set('views',path.join('views');
应用程序集(“查看引擎”、“帕格”);
//将您的favicon置于/公共位置后取消注释
//应用程序使用(favicon(path.join(u dirname,'public','favicon.ico'));
应用程序使用(记录器(“开发”);
use(bodyParser.json());
use(bodyParser.urlencoded({extended:false}));
使用(cookieParser());
app.use(express.static(path.join(uu dirname,'public'));
应用程序使用(要求('morgan')('combined'));
使用(会话({secret:'marioWim'}));
app.use(passport.initialize());
app.use(passport.session());
应用程序使用(flash());
应用程序使用('/users',users);
应用程序使用(“/profile/”,profile);
应用程序使用('/login',login);
app.use('/admin/',admin);
应用程序使用('/vote_now',vote_now);
应用程序使用(“/投票结果”,投票结果);
app.use('/auth/facebook',facebook);
应用程序使用(“/组”,组);
应用程序使用('/endvoting',endvoting);
应用程序使用('/roles',roles);
//捕获404并转发到错误处理程序
应用程序使用(功能(请求、恢复、下一步){
var err=新错误(“未找到”);
err.status=404;
下一个(错误);
});
//错误处理程序
应用程序使用(功能(错误、请求、恢复、下一步){
//设置局部变量,仅提供开发中的错误
res.locals.message=err.message;
res.locals.error=req.app.get('env')='development'?err:{};
//呈现错误页面
资源状态(资源状态| | 500);
res.render(“错误”);
});
app.listen(3000);

module.exports=app;
试试这段代码。显示Primus接受WS-connections,而Express app字段请求到特定路由。我们的服务器是Express和Primus共用的

var Express = require('express');
var app = Express();

var server = require('http').createServer(app);

var Primus = require('primus');
var primus = new Primus(server, {transformer: 'sockjs', pathname:'ws'});

primus.on('initialised', function() {
    console.log('Primus Initialized!');
});

primus.on('connection', function connection(spark) {  
  console.log("spark connected");
  spark.write("Hello Client, I'm the Server");

  spark.on('data', function(data) {
    console.log('data:', data);
    spark.write('received.');
  });
});

app.get('/', function(req, res) {
    res.send('home');
});

app.get('/test', function(req, res) {
    res.send('test');
});

server.listen({host: '0.0.0.0', port: 8081});
在测试以下各项时,节点包可能很有用:

客户端

$ curl 127.0.0.1:8081/test
test    
$ wscat -c 127.0.0.1:8081/ws/websocket

connected (press CTRL+C to quit)

< "Hello Client, I'm the Server"
> {"foo": "bar"}

< "received."

我自己解决了这个问题,这是一个愚蠢的问题。 解决方案是命令“nodemon bin/www”而不是“nodemon app.js”

$ node test.js 
Primus Initialized!
spark connected
data: { foo: 'bar' }