rutas peticion nodejs node metodo formulario enviar con javascript node.js express url-routing

javascript - peticion - post con node js



Cómo montar rutas app.get() en un prefijo de ruta particular (3)

Estoy escribiendo una API usando Node.js y Express. Mi API tiene métodos GET de la forma:

/api/v1/doSomething /api/v1/doSomethingElse

Mi código está buscando algo como esto:

server.js:

var app = express(); ... var routes = require(''./routes'') routes.attachHandlers(app, ''/api/v1'')

rutas / index.js

... module.exports.attachHandlers = function(app, context) { //get a list of all the other .js files in routes //for each route, require() it and call it myRoute myRoute.attachHandlers(app, context) }

rutas / some-route.js

... module.exports.attachHandlers = function(app, context) { app.get(context + ''/doSomething'', doSomething) app.get(context + ''/doSomethingElse'', doSomethingElse) } ...

Efectivamente, estoy pasando la ruta de contexto / punto de montaje hacia abajo a través de la aplicación. Sin embargo, si alguien escribiera una ruta como la siguiente, se perdería el contexto:

app.get(''/doFoo'', foo)

En lugar de tener esa parte de la API montada en /api/v1/doFoo , está en /doFoo . Me gustaría evitar tener que pasar la ruta de contexto de esta manera.

app.use admite el montaje de middleware en una ruta de montaje opcional. He visto referencias en línea para montar una aplicación Express completa en una ruta de montaje utilizando app.use . Esto parece ser el tipo de cosas que quiero hacer, pero no estoy seguro de cómo hacerlo o si es la mejor solución para mi caso de uso particular.

Para resumir: quiero montar mis rutas app.get () con un prefijo particular de forma predeterminada. ¿Cuál es la mejor manera de hacer esto?


Aquí hay un ejemplo práctico de cómo montar una ruta en Express 3:

./snipe3app.js

var express = require(''express''); var app = module.exports = express(); app.get(''/subapp'', function (req, res) { res.send(''You are on the /sub/subapp page.''); });

./app.js

var express = require(''express''), http = require(''http''), subApp = require(''./snipe3app''), app = express(); app.use(express.favicon()); app.use(express.bodyParser()); app.use(app.router); app.use(''/sub'', subApp); app.get(''/'', function (req, res) { res.send(''You are on the root page''); }); http.createServer(app).listen(3000, function(){ console.log(''Express server listening on port 3000. Point browser to route /secure''); });

Debe prestar atención al orden en que se manejan las rutas al hacer esto.


Con Express 4.0, la tarea es mucho más limpia con el enrutador. Puedes crear tantos enrutadores como necesites para particionar bien tu aplicación, y luego adjuntarlos con app.use (). Por ejemplo:

myapp.js

var express = require("express"), router = express.Router(), app = express(), port = 4000; // Here we declare our API which will be visible under prefix path router.get(''/'', function (req, res) { console.log("request to subspace hello"); res.send({ message: "Hi from subspace /api/v1/"}); }); // we attach our routes under /api/v1 app.use(''/api/v1'', router); // here we have direct, root-level routing app.get(''/'', function (req, res) { console.log("request to rootspace hello"); res.send({message: "Hi from root /"}); }); app.listen(port); console.log("App active on localhost:" + port);

Entonces corre

node myapp.js

y visita

http://localhost:4000 and http://localhost:4000/api/v1