【问题标题】:Object #<Server> has no method 'use' [Express+ShareJS]对象#<Server> 没有“使用”方法 [Express+ShareJS]
【发布时间】:2013-06-05 04:00:27
【问题描述】:

环境

  • Express 3.2.4
  • ShareJS 0.6.2
  • OS X 10.8.3

目标

我正在尝试让 ShareJS 在 Express 应用程序中运行。


问题

运行node app.js时出现以下错误:

/Users/eric/Documents/Projects/collabit/node_modules/share/src/server/index.coffee:52
      server.use(options.staticpath, connect["static"]("" + __dirname + "/../.
             ^
TypeError: Object #<Server> has no method 'use'
    at Function.create.attach.attach (/Users/eric/Documents/Projects/collabit/node_modules/share/src/server/index.coffee:52:14)
    at Object.<anonymous> (/Users/eric/Documents/Projects/collabit/app.js:43:16)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain (module.js:492:10)
    at process.startup.processNextTick.process._tickCallback (node.js:244:9)

在决定换成 ShareJS 之前,我使用 express cli 界面生成了一个应用程序,并且使用 SocketIO 工作得很好。我很确定我的问题是我如何制作服务器,但我不知道如何应该创建服务器对象以保持快速功能但允许 ShareJS 附加.b


代码

/**
 * Module dependencies.
 */

var express = require('express')
  , sharejs = require('share')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path');

var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});

app.get('/', routes.index);
app.get('/users', user.list);

var server = http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

/**
 * ShareJS Code
 */

var options = {db: {type: 'none'}};
sharejs.server.attach(server, options);

问题

创建我的服务器对象以允许 ShareJS 附加到它同时保留 Express 功能的正确方法是什么。


谢谢!

提前感谢您的帮助,如果需要任何其他信息,请告诉我。

【问题讨论】:

    标签: javascript node.js express share


    【解决方案1】:

    我遇到了类似的问题。经过大量的试验和错误,这对我有用:

    var express = require('express'),
    http = require('http'),
    sharejs = require('share').server;
    
    var app  = express();
    var server = http.createServer(app); 
    
    var options = {db:{type:'none'}}; // See docs for options. {type: 'redis'} to enable     persistance.
    
    // Attach the sharejs REST and Socket.io interfaces to the server
    sharejs.attach(app, options);
    
    app.use(app.router);
    
    app.set('views', __dirname + '/views');
    app.engine('html', require('ejs').renderFile);
    
    server.listen(8000, function () {
        console.log('Server running at http://127.0.0.1:8000/');
    });
    
    app.get('/', function(req, res) {
        res.render('share.html');
    });
    

    然后在views/share.html中我有标准示例html:

    <!DOCTYPE html>
    <html>
    <head>
        <title>Test</title>
        <script src="http://ajaxorg.github.com/ace/build/src/ace.js"></script>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
        <script src="/channel/bcsocket.js"></script>
        <script src="/share/share.js"></script>
        <script src="/share/ace.js"></script>
        <script>
            $(document).ready(function() {
                var editor = ace.edit("editor");
    
                sharejs.open('hello', 'text', 'http://localhost:8000/channel', function (error, doc) {
                    doc.attach_ace(editor);
                });
            });
        </script>
        <style>
            #editor {
                width: 200px;
                height: 100px;
            }
        </style>
    </head>
        <body>
            <div id="editor"></div>
        </body>
    </html>
    

    【讨论】:

    • 确实解决了这个问题!我想知道为什么文档特别不同。哦,好吧,为您的帮助!
    • 我一直看到“sharejs 没有附加方法”。 oyu 知道为什么会这样吗?快把我逼疯了!
    • 你需要使用 0.6.3 版本而不是 0.7.*
    • 您使用 ace.js 的 cdn 并在本地引用它是否有原因?
    • 如果我没记错的话,它们是两个不同的东西。 ace 编辑器(通过 cdn 加载)和将 sharejs 链接到 ace 编辑器的代码
    猜你喜欢
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 2014-10-08
    • 2015-05-02
    • 1970-01-01
    相关资源
    最近更新 更多