servidor rutas proyecto node files crear node.js express router

proyecto - ¿Cómo separar rutas en Node.js y Express 4?



servidor node js (6)

En lo que se refiere a separar las rutas del archivo principal ...

Server.js

//include the routes file var routes = require(''./routes/route''); var users = require(''./routes/users''); var someapi = require(''./routes/1/someapi''); //////// app.use(''/'', routes); app.use(''/users'', users); app.use(''/1/someapi'', someapi);

routes / route.js

//last line - try this module.exports = router;

También para un nuevo proyecto puedes probar con la línea de comando

express project_name

Necesitarás un generador expreso para eso

Quiero separar las Rutas de mi archivo server.js.

Estoy siguiendo este tutorial en Scotch.io http://scotch.io/tutorials/javascript/build-a-restful-api-using-node-and-express-4

Está funcionando si todas las líneas están en el archivo server.js. Pero estoy fallando en separarme. ¿Cómo puedo hacer que esto funcione?

server.js

// set up ====================================================================== var express = require(''express''); var app = express(); var bodyParser = require(''body-parser''); // configuration =============================================================== app.use(bodyParser()); var port = process.env.PORT || 8000; var mongoose = require(''mongoose''); var database = require(''./config/database''); mongoose.connect(database.url); var Video = require(''./app/models/video''); // routes ======================================================================= app.use(''/api'', require(''./app/routes/routes'').router); // listen (start app with node server.js) ====================================== app.listen(port); console.log("ready captain, on deck" + port); module.exports = app;

Y la aplicación / routes / routes.js

var express = require(''express''); var router = express.Router(); router.use(function(req, res, next) { console.log(''Something is happening.''); next(); }); router.get(''/'', function(req, res) { res.json({ message: ''hooray! welcome to our rest video api!'' }); }); router.route(''/videos'') .post(function(req, res) { var video = new Video(); video.title = req.body.title; video.save(function(err) { if (err) res.send(err); res.json({ message: ''Video criado!'' }); }); }) .get(function(req, res) { Video.find(function(err, videos) { if (err) res.send(err); res.json(videos); }); }); module.exports.router = router;


En mi caso, me gusta tener tanto Typescript como sea posible. Así es como organicé mis rutas con clases:

export default class AuthService { constructor() { } public login(): RequestHandler { return this.loginUserFunc; } private loginUserFunc(req: Request, res: Response): void { User.findOne({ email: req.body.email }, (err: any, user: IUser) => { if (err) throw err; if(!user) return res.status(403).send(AuthService.noSuccessObject()); else return AuthService.comparePassword(user, req, res); }) } }

Desde su server.js o donde tenga su código de servidor, puede llamar al AuthService de la siguiente manera:

import * as express from "express"; import AuthService from "./backend/services/AuthService"; export default class ServerApp { private authService: AuthService; this.authService = new AuthService(); this.myExpressServer.post("/api/login", this.authService.login(), (req: express.Request, res: express.Response) => { }); }


Otra forma de separar las rutas en sus propios archivos con Express 4.0:

server.js

var routes = require(''./routes/routes''); app.use(''/'', routes);

routes.js

module.exports = (function() { ''use strict''; var router = require(''express'').Router(); router.get(''/'', function(req, res) { res.json({''foo'':''bar''}); }); return router; })();


Un problema con el que me topé fue intentar registrar la ruta con los métodos cuando usé el enrutador .use terminó usando este método para resolverlo. Le permite mantener el camino a un nivel de enrutador inferior en el nivel superior.

routes.js

var express = require(''express''); var router = express.Router(); var posts = require(''./posts''); router.use(posts(''/posts'')); module.exports = router;

posts.js

var express = require(''express''); var router = express.Router(); let routeBuilder = path => { router.get(`${path}`, (req, res) => { res.send(`${path} is the path to posts`); }); return router } module.exports = routeBuilder;

Si registra la pila del enrutador, puede ver las rutas y los métodos


Una forma de separar las rutas en su propio archivo.

SERVER.JS

var routes = require(''./app/routes/routes''); //module you want to include var app=express(); routes(app); //routes shall use Express

ROUTES.JS

module.exports=function(app) { //place your routes in here.. app.post(''/api/..., function(req, res) {.....} //example }


Server.js

var express = require(''express''); var app = express(); app.use(express.static(''public'')); //Routes app.use(require(''./routes'')); //http://127.0.0.1:8000/ http://127.0.0.1:8000/about //app.use("/user",require(''./routes'')); //http://127.0.0.1:8000/user http://127.0.0.1:8000/user/about var server = app.listen(8000, function () { var host = server.address().address var port = server.address().port console.log("Example app listening at http://%s:%s", host, port) })

routes.js

var express = require(''express''); var router = express.Router(); //Middle ware that is specific to this router router.use(function timeLog(req, res, next) { console.log(''Time: '', Date.now()); next(); }); // Define the home page route router.get(''/'', function(req, res) { res.send(''home page''); }); // Define the about route router.get(''/about'', function(req, res) { res.send(''About us''); }); module.exports = router;

* En routs.js debes definir Middle ware

ref http://wiki.workassis.com/nodejs-express-separate-routes/