首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法在Expess中工作的模块路由

无法在Expess中工作的模块路由
EN

Stack Overflow用户
提问于 2016-06-23 19:16:05
回答 2查看 165关注 0票数 1

我最初在一个api.js中编写了我的路线,但我认为有一个更好的方法,在互联网上查看人们如何实现这些东西。我遵循了几个教程,并提出了以下布局,其中server.js是我的开场白:

代码语言:javascript
运行
复制
-app
--models
--routes
---index.js
---settings.js
---sources.js
server.js

我将路径划分为设置和源,在index.js中调用它们,并在server.js中要求它们。我希望一切都能正常工作,但当我测试路由时,没有什么能解决/settings或/sources问题。我不知道我错过了什么,但我不断地回顾这件事,我觉得这可能是我没有得到的愚蠢的东西。我不知道这个过程的哪一部分我错了,我已经看得太久了!任何帮助都是感激的,谢谢!

server.js

代码语言:javascript
运行
复制
var routes = require('./app/routes')(app, express)
app.listen(config.port);
console.log('Magic happens on port ' + config.port + '!');

index.js

代码语言:javascript
运行
复制
module.exports = function(app, express){
    require('./settings')(app, express);
    require('./sources')(app, express);
}

settings.js (sources.js非常类似,因此我将把它省去,以求简洁)

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
//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

代码语言:javascript
运行
复制
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。没有错误,但是请求只是在邮递员中超时。

代码语言:javascript
运行
复制
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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-23 19:42:36

我会改变您设置您的路由器中间件的方式,使其工作方式略有不同。与其在express模块之间传递,不如在路由器中包含express。此外,没有理由传递app,因为您甚至没有使用它,而且它违反了直觉,因为它打破了您试图通过使用路由器中间件建立的关注点的分离。

我想说的是,查看如何构造您的Express应用程序的最好方法是查看特快发生器构建它生成的应用程序的方式。

server.js

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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个文件。这将是一个更好的做法。

票数 2
EN

Stack Overflow用户

发布于 2016-06-23 19:42:29

在您的代码段中,我没有看到您将路由器安装到应用程序的任何地方。

例如:

index.js

代码语言:javascript
运行
复制
module.exports = function(app, express){
    app.use('/', require('./settings')(app, express));
    app.use('/', require('./sources')(app, express));
}

我经常看到一个布局看起来更像这样:

代码语言:javascript
运行
复制
app
|-- server.js
`-- routes
    |-- settings.js
    `-- sources.js

server.js

代码语言:javascript
运行
复制
var express = require('express');
var app = express();
app.use('/settings', require('./routes/settings'));
app.use('/sources', require('./routes/sources'));
app.listen(port)

settings.js

代码语言:javascript
运行
复制
var express = require('express');
var router = express.Router();
module.exports = router

router.get('/', function(req, res, next) { ... });
router.put('/', function(req, res, next) { ... });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37999995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档