我的快速应用程序的路由不起作用

时间:2019-03-18 10:38:14

标签: node.js express routing

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

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

这是我当前所需的设置(不适用于我的query.js和query2.js文件,我得到的错误是未定义“ App”)。 当我将查询代码(来自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(在“ routes”文件夹中)

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(在models文件夹中)

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

2 个答案:

答案 0 :(得分: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:这行得通,但是如果您拥有更多的路由,事情可能很快就会变得难看,因此,如果您对源进行重组,以便在应用程序入口文件中清楚地表达主要路由,则将更易于维护;但这是另一个问题。

答案 1 :(得分:0)

在index.js中添加此行。

router.use(query)