Mac OS X NodeJS: нет ошибки метода «маршрутизатор» - PullRequest
2 голосов
/ 05 марта 2012

Установлен NodeJS v0.6.12 на MAC OS X с использованием портов Mac.

    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 ]

4 голосов
/ 05 марта 2012

Хорошо, трудно сказать, поскольку похоже, что учебник, который вы читаете, не использует connect, но вот пример использования 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);
0 голосов
/ 25 октября 2012

У меня был тот же вопрос. Ричард Роджер, автор «Начала разработки мобильных приложений в облаке», предложил мне либо использовать модуль dispatch (https://github.com/caolan/dispatch), либо установить более старую версию connect, используя:

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

Надеюсь, это поможет! :)

0 голосов
/ 28 августа 2012

Установить экспресс и слегка переписать код:

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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...