我正在尝试以最佳方式构建Express应用程序的文件。路由器模块使我感到困惑。
据我所知,所有查询都应该在models文件夹中。
这是我当前所需的设置(不适用于我的query.js和query2.js文件,我得到的错误是未定义“ App”)。 当我将查询代码(来自query.js文件)直接放在App.js文件中时,它就可以工作。
我的设置也可以正确用于我的电子邮件路由。
如何解决?
这是我的项目结构:
这是我文件的内容:
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);
});
答案 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)