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/