Как правильно организовать роутинг на node?

Привет. Думаю, я не до конца понял основы в маршрутизации, я точно знаю, здесьошибка, но не могу понять, как это делать правильно.
Насколько я знаю, ... / name и ... / age должны быть параметрами запроса Как это сделать? Спасибо за любую помощь

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

var me = {name : 'jura', age: 22}

app.get('/', function(req, res){
           res.send('welcome to homepage');
           res.end();
})

app.get('/user', function(req, res){
           res.send(me);
           res.end();
})

app.get('/user/name', function(req, res){      /*  уверен что зделал плохо. Какие методы использовать чтобы грамотно описать маршрутизацию *\
           res.send(me.name);
           res.end();
})

app.get('/user/age', function(req, res){        /.....
           res.send(me.age);
           res.end();
})
  • Вопрос задан
  • 1907 просмотров
Решения вопроса 2
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Чтобы сделать хорошо, нужно сделать без express, например, аналог Вашего кода:

var http = require('http');

var me = { name: 'jura', age: 22 };

var routing = {
  '/': 'welcome to homepage',
  '/user': me,
  '/user/name': function() { return me.name; },
  '/user/age': function() { return me.age; }
};

var types = {
  object: function(o) { return JSON.stringify(o); },
  string: function(s) { return s; },
  undefined: function() { return 'not found'; },
  function: function(fn, req, res) { return fn(req, res) + ''; },
};

http.createServer(function (req, res) {
  var data = routing[req.url],
      result = types[typeof(data)](data, req, res);
  res.end(result);
}).listen(80);


И более универсальный вариант с параметрами:

var http = require('http');

var me = { name: 'jura', age: 22 };

var routing = {
  '/': 'welcome to homepage',
  '/user': me,
  '/user/name': function() { return me.name; },
  '/user/age': function() { return me.age; },
  '/user/*': function(client, par) { return 'parameter=' + par[0]; }
};

var types = {
  object: function(o) { return JSON.stringify(o); },
  string: function(s) { return s; },
  number: function(n) { return n + ''; },
  undefined: function() { return 'not found'; },
  function: function(fn, par, client) { return fn(client, par); }
};

var matching = [];
for (key in routing) {
  if (key.indexOf('*') !== -1) {
    var rx = new RegExp(key.replace('*', '(.*)'));
    matching.push([rx, routing[key]]);
    delete routing[key];
  }
}

function router(client) {
  var rx, par, route = routing[client.req.url];
  if (route === undefined) {
    for (var i = 0, len = matching.length; i < len; i++) {
      rx = matching[i];
      par = client.req.url.match(rx[0]);
      if (par) {
        par.shift();
        route = rx[1];
        break;
      }
    }
  }
  var renderer = types[typeof(route)];
  return renderer(route, par, client);
}

http.createServer(function (req, res) {
  res.end(router({ req: req, res: res }) + '');
}).listen(80);
Ответ написан
я думаю, что следует использовать параметризированный роут:

app.get('/user/:field', function(req, res){
    console.log(req.params.field);
//.....
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы