当前位置: 首页 > 面试题库 >

快递路线的单独文件

令狐昌胤
2023-03-14
问题内容

我想知道如何将Express中的所有api路由移到与routes.js文件分开的单独server.js文件中

app.use()为每个路由使用了很长的api路由列表。因此,每条路线都在其自己的文件中,例如movies.jsmovie.js但是当我列出这些路线时,它会在server.js

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

这是我目前拥有的:

server.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;
  }
})

路线示例

电影.js

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

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

module.exports = router;

问题答案:

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

movieController.js

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

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

routes.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;

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

app.js

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


 类似资料:
  • 我有一个使用Node.js和Express构建的web应用程序。现在我想列出所有注册的路线及其适当的方法。 例如,如果我执行了 我想检索一个对象(或与之相当的东西),例如: 这可能吗?如果可能,如何实现? 更新:同时,我创建了一个名为get-routes的npm包,它从给定的应用程序中提取路由,解决了这个问题。目前,只支持Express4.x,但我想现在这是可以的。只是通知一下。

  • 我在下面尝试将一个参数发送到单独的功能文件(通过下面的示例),但它没有按预期工作。 project.feature 删除项目。特色 低于异常 通用域名格式。凭直觉。空手道。例外KarateException:项目。功能:48-删除_项目。功能:11-状态代码为:404,预期为:200,响应时间:239,url:https://localhost:8080/project/#(id)响应:{“状态”

  • 我使用部署在ActiveMQ服务内部的Apache Camel模块。 假设我使用Spring DSL并且在文件(简化版)中有路由定义(实现为): 接下来,我在其他XML文件(简化)中配置了骆驼上下文: 我希望使用IoC术语将来自的共享路由(ID=)声明为每个依赖项的实例,因此来自单个骆驼上下文(ID=、、)的每条路由都应该使用该共享路由的自己的实例(ID=),具有单独的内部状态和bean实例等。

  • 问题内容: 我的Express应用上有一条路线如下: 该ID始终是数字。但是,此路线目前与其他条件匹配,例如。 我想我希望从中得到两点: 仅在ID为数字时使用此路由,并且 仅当尚未为该特定参数定义路线时(例如与冲突)。 能做到吗? 问题答案: 扩展Marius的答案,您可以提供正则表达式和参数名称:

  • 我有一个名为“bluetoothIn”的处理程序,我想使用HandlerThread类将其传递给一个单独的循环器,该类将提供循环器。然而,我需要将结果从“handleMessage(Message msg)”发回UI线程,因为我不能修改除主线程之外的其他线程的UI元素。 这是我的代码:

  • 问题内容: 我有2个FileHandlers可以写出两个单独的文件,并且发生的I / O数量使我的应用程序速度大大降低: 我决定让FileHandlers在单独的线程上运行。 由于它们位于单独的线程上,因此我需要一个“队列”概念,以便这些单独的线程可以轮询此队列并打印出所有传入消息。 我已经对消息进行了预格式化,以便所使用的任何参数在它们实际到达FileHandler中的打印输出之前都不会更改。