Javascript 如何在ExpressJS中使用同一路径下的第二个路由文件

Javascript 如何在ExpressJS中使用同一路径下的第二个路由文件,javascript,express,Javascript,Express,我是express的新手,我已经通过了一个教程,该教程让我添加了如下路线: var index = require('./routes/index'); var foods = require('./routes/foods'); app.use('/', index); app.use('/api', foods); 然后像这样使用它们: var index = require('./routes/index'); var foods = require('./routes/foods')

我是express的新手,我已经通过了一个教程,该教程让我添加了如下路线:

var index = require('./routes/index');
var foods = require('./routes/foods');
app.use('/', index);
app.use('/api', foods);
然后像这样使用它们:

var index = require('./routes/index');
var foods = require('./routes/foods');
app.use('/', index);
app.use('/api', foods);
我现在想在
/api
路径下添加另一条路由,但我不确定如何在语义上做到这一点。类似这样的东西(尽管这不起作用)

server.js

var index = require('./routes/index');
var foods = require('./routes/foods');
var foods = require('./routes/users');
...
app.use('/', index);
app.use('/api', [foods, users]);
这将允许我有如下路线:

  • /api/food/:id
    /api/foods
    来自
    foods.js
  • /api/user/:id
    /api/users
    来自
    users.js

除非您使用http动词来指定目的,否则URL必须是唯一的

var foods = require('./routes/foods');
var users = require('./routes/users');

app.get('/api/foods', foods);
app.get('/api/users', users);

app.post('/api/foods', function(req, res) { /* other function */ });
更新

假设您想将业务逻辑划分到单独的文件中,您可以通过以下方式实现:

食品公司

module.exports = {
  getAll: function(req, res) { ... },
  getItem: function(req, res) { ... },
  addItem: function(req, res) { ... }
};
users.js

module.exports = {
  getAll: function(req, res) { ... },
  getItem: function(req, res) { ... }
};
server.js

var foods = require('./routes/foods');
var users = require('./routes/users');

app.get('/api/food/:id', foods.getItem);
app.get('/api/foods',    foods.getAll);
app.post('/api/foods',   foods.addItem);

app.get('/api/user/:id', users.getItem);
app.get('/api/users',    users.getAll);
我个人喜欢在文件中列出路由,它可以让您快速查找支持哪些谓词的路由。注意,我已经创建了一个额外的函数来添加新的食物项目


我希望这次更新能有所帮助

我想你误解了我的问题。
GET
POST
方法存储在
foods.js
users.js
中,我正在
server.js
中工作,试图导入前缀为
/api
的文件,这样我就可以使用
/api/food/:id
这样的路径,
/api/foods
来自
foods.js
/api/user/:id
/api/users
来自
users.js
好的,让我更新我的答案,并展示一个可能的解决方案。我知道这个解决方案将如何工作,但它似乎会使
服务器.js
文件过载。我希望它只有一个
app.use('api',routes)
语句。您的解决方案还将路由路径从函数中拆分。我想我更喜欢在routes
app.get('/foods',function(req,res,next){
我通常将路由定义移动到routes.js文件中,因此我在server.js中只有设置和中间件-可能看起来像require('/routes.js')(app);我只在routes文件中保留url和对控制器的引用