Mac OS X NodeJS:没有方法'路由器'错误

时间:2012-03-05 17:37:04

标签: node.js connect npm

使用Mac端口在MAC OS X上安装NodeJS v0.6.12。

    win764:node iwaldman$ which node
         /opt/local/bin/node

    win764:node iwaldman$ node -v
         v0.6.12

使用npm install connect安装连接。

写了一个简单的程序,connectServer.js:

    var connect = require('connect');
    var util    = require('util');

    function sendJSON(response, obj) {
        response.writeHead(200, {'Content-Type':'application/json'});
        var objStr = JSON.stringify(obj);
        util.debug('SENDJSON: ' + objStr);
        response.end(objStr);
    }

    var server = connect.createServer(
    connect.router(function(app){
        app.get('/foo', function(req, res){
            sendJSON(res, {path: 'foo'});
        })
        app.get('/bar', function(req, res){
            sendJSON(res, {parth: 'bar'});
        })
    })
    );

    server.listen(3000);

    util.debug('Server running at http://127.0.0.1:3000');

运行节点connectServer.js。

收到以下错误:

    win764:node iwaldman$ node connectserver.js 

    node.js:201
            throw e; // process.nextTick error, or 'error' event on first tick
                  ^
    TypeError: Object function createServer() {
      function app(req, res){ app.handle(req, res); }
      utils.merge(app, proto);
      utils.merge(app, EventEmitter.prototype);
      app.route = '/';
      app.stack = [].slice.apply(arguments);
      return app;
    } has no method 'router'
        at Object.<anonymous> (/Users/iwaldman/dev/node/connectserver.js:12:10)
        at Module._compile (module.js:441:26)
        at Object..js (module.js:459:10)
        at Module.load (module.js:348:31)
        at Function._load (module.js:308:12)
        at Array.0 (module.js:479:10)
        at EventEmitter._tickCallback (node.js:192:40)

任何想法都表示赞赏。

3 个答案:

答案 0 :(得分:4)

好吧,很难说因为你看到的教程看起来真的没有使用connect,但这里有一个使用连接的例子。

function sendJSON(response, obj) {
  response.writeHead(200, {'Content-Type':'application/json'});
  var objStr = JSON.stringify(obj);
  response.end(objStr);
}

function get(path, cb) {
  return function(req, res, next) {
    if (req.method != 'GET' || req.url != path) return next();
    cb(req, res, next);
  }
}

var connect = require('connect')
var app = connect()
  .use(connect.query())
  .use(get('/foo', function(req, res, next) {
    sendJSON(res, {path: 'foo'});
  }))
  .use(get('/bar', function(req, res, next) {
    sendJSON(res, {parth: 'bar'});
  }))
  .listen(3000);

答案 1 :(得分:0)

安装express并稍微重写代码:

var express = require('express');
var util    = require('util');

function sendjson(res,obj)
{
    res.writeHead(200, {
        'Content-Type': 'application/json',
    });

    var objstr = JSON.stringify(obj);
    util.debug('SENDJSON:' + objstr);
    res.end(objstr);
}


var app = express();

app.get('/foo', function(req,res) {
    sendjson(res, {path:'/foo'});
});

app.get('/bar', function(req,res) {
    sendjson(res, {path:'/bar'});
});

app.listen(3000);
util.debug('Server running at http://127.0.0.1:3000');

答案 2 :(得分:0)

我有同样的问题。 “在云中开始移动应用程序开发”的作者Richard Rodger建议我应该使用 dispatch 模块(https://github.com/caolan/dispatch)或安装旧版本的connect ,使用:

npm install git://github.com/senchalabs/connect.git#1.8.6

希望这有帮助! :)