node.js 快递中路由的单独文件

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/35749288/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-02 20:00:19  来源:igfitidea点击:

separate file for routes in express

node.jsexpress

提问by svnm

I was wondering how do I move all of my api routes in express into a separate routes.jsfile from my server.jsfile

我想知道如何将 express 中的所有 api 路由移动到routes.js与我的server.js文件不同的文件中

I have a long list of api routes using app.use()for each route. So each route is in its own file, e.g. movies.js, movie.jsbut when I list these it makes for a long list in server.js

我有一长串app.use()用于每条路线的 api路线。所以每条路线都在它自己的文件中,例如movies.jsmovie.js但是当我列出这些时,它会在server.js

So I want to remove the list of api endpoints section from the below server.jsout to a routes.jsfile.

所以我想将下面的 api 端点列表部分删除server.js到一个routes.js文件中。

Here is what I have currently:

这是我目前所拥有的:

server.js

服务器.js

import path from 'path'
import express from 'express'
import webpack from 'webpack'
import webpackDevMiddleware from 'webpack-dev-middleware'
import webpackConfig from './webpack.config.dev'

const app = express();

/* api endpoints, can be many more, I want them in routes.js */    
app.use('/api/movies', require('./src/api/routes/movies'))
app.use('/api/movie', require('./src/api/routes/movie'))

app.use(webpackDevMiddleware(webpack(webpackConfig), {
  publicPath: webpackConfig.output.publicPath
}));

app.use('/public', express.static(__dirname + '/public'))    

app.get('*', function(req, res) {
  res.sendFile(path.join(__dirname, 'index.html'));
});


app.listen(3000, 'localhost', function (err) {
  if (err) {
    console.log(err);
    return;
  }
})

An example route

示例路线

movies.js

电影.js

var express = require('express');
var request = require("request");
var router = express.Router();

router.get('/', function(req, res) {
  res.json({})
});

module.exports = router;

回答by Mukesh Sharma

You can try to use the following modular approach. Define controller files having logic per feature. e.g. movie.

您可以尝试使用以下模块化方法。定义具有每个功能逻辑的控制器文件。例如电影。

movieController.js

电影控制器.js

module.exports = {
    getMovie : function(req, res){
       //do something
    },
    getMovies : function(req, res){
       //do something
    },
    postMovie : function(req, res){
       //do something
    }
}

Then, reference that controller in routes files and simply plug those functions.

然后,在路由文件中引用该控制器并简单地插入这些函数。

routes.js

路由.js

var express = require('express');
var movieCtrl = require('./movieController');

var router = express.Router();

router.route('/movie').get(movieCtrl.getMovie);
router.route('/movie').post(movieCtrl.postMovie);
router.route('/movies').get(movieCtrl.getMovies);

module.exports = router;

And, in app.js, mount the routes to suitable location, e.g. /api

并且,在 app.js 中,将路由挂载到合适的位置,例如 /api

app.js

应用程序.js

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