【问题标题】:The routing of my express app does not work我的快递应用程序的路由不起作用
【发布时间】:2019-03-18 10:38:13
【问题描述】:

我正在尝试以最佳方式构建我的 Express 应用程序的文件。路由器模块让我很困惑。

据我所知,所有查询都应该在模型文件夹中。

这是我当前所需的设置(不适用于我的 query.js 和 query2.js 文件,我得到的错误是“应用程序”未定义)。 当我将查询代码(来自 query.js 文件)直接放在我的 App.js 文件中时,它可以正常工作。

我的设置也适用于我的电子邮件路由。

如何解决?

这是我的项目结构:

project_structure

这里是我的文件内容:

APP.JS

const express = require('express');
const request = require('request');
const requestPromise = require('request-promise');
const bluebird = require('bluebird');
const bodyParser = require('body-parser');
const cors = require('cors');
const app = express();

app.use(cors());

const router = require('./routes'); 
app.use(router);

function App(req, res) {
  if (!req.url) {
    req.url = '/';
    req.path = '/';
  }
  return app(req, res);
}

module.exports.my_server = App;

INDEX.JS(在路由文件夹中)

const express = require('express');
const router = express.Router();
const config = require('../config');

let email = require('../models/email');

const query = require("../models/query");
const query2 = require("../models/query2");

router.post('/api/subscribe', function (req, res) {
  const data = {
    subscribed: true,
    address: req.body.email,
  };
...

module.exports = router;

QUERY.JS(在模型文件夹中)

app.get('/query', function(req, res, next) {
    request({
      uri: 'https://queryapi.api/search?q=stuff&api-key=api_key',
      qs: {
        api_key: 'api_key',
      }
    }).pipe(res);
  });

【问题讨论】:

    标签: node.js express routing


    【解决方案1】:

    您无权从您的 query.js 访问变量 app。 您可能希望从 query.js 导出您的方法,以便您可以像这样将它们导入您的路由器:

    编辑:将 http 动词从 .get 更改为 .post

    替换:

    app.get('/query', function(req, res, next) {
    

    exports.post = function(req, res, next) {
    

    这就是您将导出的方法 query.post 分配给路由 /api/subscribe/query 的方式

    const query = require("./query");
    
    router.post('/api/subscribe/query', query.post);
    /* more end points below: */
    // router.get(...
    // router.put(...
    //  ...and so on
    

    POST 请求 /api/subscribe/query

    P.S:这可行,但是如果您有更多路线,事情很快就会变得丑陋,因此如果您重组您的源代码,以便在您的应用程序入口文件中清楚地表达主要路线,它将更易于维护;但这是另一个问题。

    【讨论】:

      【解决方案2】:

      在 index.js 中添加这一行。

      router.use(query)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-21
        • 1970-01-01
        • 2021-10-28
        • 1970-01-01
        • 2016-11-23
        • 1970-01-01
        相关资源
        最近更新 更多