我最初在一个api.js中编写了我的路线,但我认为有一个更好的方法,在互联网上查看人们如何实现这些东西。我遵循了几个教程,并提出了以下布局,其中server.js是我的开场白:
-app
--models
--routes
---index.js
---settings.js
---sources.js
server.js我将路径划分为设置和源,在index.js中调用它们,并在server.js中要求它们。我希望一切都能正常工作,但当我测试路由时,没有什么能解决/settings或/sources问题。我不知道我错过了什么,但我不断地回顾这件事,我觉得这可能是我没有得到的愚蠢的东西。我不知道这个过程的哪一部分我错了,我已经看得太久了!任何帮助都是感激的,谢谢!
server.js
var routes = require('./app/routes')(app, express)
app.listen(config.port);
console.log('Magic happens on port ' + config.port + '!');index.js
module.exports = function(app, express){
    require('./settings')(app, express);
    require('./sources')(app, express);
}settings.js (sources.js非常类似,因此我将把它省去,以求简洁)
var bodyParser = require('body-parser');
var Settings = require('../models/settings');
module.exports = function (app, express) {
    var router = express.Router();
    //route for settings
    router.route('/settings')
        .get(function (req, res) {
            //check to see if any records exists
            ...
        })
        .put(function (req, res) {
           ...
        });
    return router
}更新:--我摆脱了index.js文件,将app.use语句放入server.js文件。然而,如果不传递明确的论点,我就无法使它工作起来。我试着按照答案中的建议进行设置--2.js,但没有骰子。
我所做的: server.js
//routes!
app.use('/', require('./app/routes/settings')(express));
app.use('/', require('./app/routes/sources')(express));
app.use('/settings2', require('./app/routes/settings-2'));
//start it up
app.listen(config.port);新settings.js
module.exports = function (express) {
    var apiRouter = express.Router();
    //route for settings
    apiRouter.route('/settings')
        .get(function (req, res) {
           ...
        .put(function (req, res) {
            ...
        });
    return apiRouter;
}设置-2.js-这在本地主机上不起作用:8080/ work 2。没有错误,但是请求只是在邮递员中超时。
var Settings = require('../models/settings');
module.exports = function () {
    var apiRouter = require('express').Router();
    //route for settings
    apiRouter.route('/')
        .get(function (req, res) {
            //check to see if any records exists
           ...
        })
        .put(function (req, res) {
            ...
        });
    return apiRouter;
}发布于 2016-06-23 19:42:36
我会改变您设置您的路由器中间件的方式,使其工作方式略有不同。与其在express模块之间传递,不如在路由器中包含express。此外,没有理由传递app,因为您甚至没有使用它,而且它违反了直觉,因为它打破了您试图通过使用路由器中间件建立的关注点的分离。
我想说的是,查看如何构造您的Express应用程序的最好方法是查看特快发生器构建它生成的应用程序的方式。
server.js
var express = require('express');
var bodyParser = require('body-parser');
var routes = require('./routes/index');
var app = express();
var port = process.env.PORT || 3000;
app.use(bodyParser.json());
app.use('/', routes);
app.listen(port);index.js
var router = require('express').Router();
var settings = require('./settings');
var sources = require('./sources');
module.exports = function() {
    router.use('/settings', settings);
    router.use('/sources', sources);
    return router;
}settings.js
var router = require('express').Router();
module.exports = function() {
    router.route('/')
        .get(function(req, res) {
            // do GET /settings route work
        })
        .put(function(req, res) {
            // do PUT /settings route work
        })
    return router;
}sources.js
var router = require('express').Router();
module.exports = function() {
    router.route('/')
        .get(function(req, res) {
            // do GET /sources route work
        })
        .put(function(req, res) {
            // do PUT /sources route work
        })
    return router;
}同样在上面的代码中,最好摆脱index.js代码,将两个/settings和/sources中间件语句迁移到server.js,并将代码减少1个文件。这将是一个更好的做法。
发布于 2016-06-23 19:42:29
在您的代码段中,我没有看到您将路由器安装到应用程序的任何地方。
例如:
index.js
module.exports = function(app, express){
    app.use('/', require('./settings')(app, express));
    app.use('/', require('./sources')(app, express));
}我经常看到一个布局看起来更像这样:
app
|-- server.js
`-- routes
    |-- settings.js
    `-- sources.jsserver.js
var express = require('express');
var app = express();
app.use('/settings', require('./routes/settings'));
app.use('/sources', require('./routes/sources'));
app.listen(port)settings.js
var express = require('express');
var router = express.Router();
module.exports = router
router.get('/', function(req, res, next) { ... });
router.put('/', function(req, res, next) { ... });https://stackoverflow.com/questions/37999995
复制相似问题