Express - nodejs app在浏览模块时无限旋转

时间:2017-08-14 08:39:51

标签: node.js express

注意 - 我是新手试图用express编写我的第一个应用程序。 我按照视频教程,没有按照任何电子书或文档教程学习。因此,现在通过阅读电子书很难找到我所缺少的东西。

我有以下文件 -

app.js
/src/routes/testRoutes.js
/src/controllers/testController.js

以下是我的app.js文件 -

var express = require('express');
var app = express();
var port = 5000;

var testRouter = require('./src/routes/testRoutes');
app.use('/Test',testRouter);

app.get('/',function(req,res){
        res.send("Hello world");
});

app.listen(port,function(err){
    console.log("Running port on "+port);
});

testRoutes.js

var express = require('express');
var testRouter = express.Router();

var router = function()
{
    var testController = require('../controllers/testController')(null);
    testRouter.route('/hello').get(testController.hello);

    return testRouter;
};


module.exports = router;

testController.js

//Will use revealing module pattern
var testController = function(botService)   
{
    var hello = function(req,res){
        console.log("Inside bot controller");
    };

    return {
        hello:hello
    }
}

module.exports = testController;

如果我在运行http://localhost:5000/后浏览node app我可以看到Hello world,但如果我浏览localhost:5000/Test,它会无限期地旋转。 现在,我只想直接从控制器文件在浏览器上显示一些消息。

更新

通过对路由器文件testRoutes.js(删除该功能)进行以下修改,并向控制器添加res.send(),我能够使其工作(停止旋转并显示消息) -

var express = require('express');
var testRouter = express.Router();
var testController = require('../controllers/testController');

testRouter.get('/world',testController.hello); 
module.exports = testRouter;

但是,我仍然无法使用路径文件中的函数使其工作,该函数可以接受参数。我浏览了https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs/routeshttp://expressjs.com/en/guide/routing.html链接。

更新2

参考@ SatishPatel的答案,将控制器文件的内容更改为以下格式对我有用 -

function something()
{
    return 5;
}
//Following works but above does not 
module.exports = {
hello : function(req, res){
   res.send('Get a book '+something())
},
getAllBooks : function(req, res){
   res.send('Get all book');
}
}

但是,我想在使用揭示模块模式时使其工作,如上面的问题描述中所述。如果我在我的控制器中使用以下内容 -

//Will use revealing module pattern

var testController = function()   
{
    function something()
    {
        return 5;
    }

    var hello = function(req,res){
        //console.log("Inside bot controller");
        res.send("Hello world");
    };

    return {
        hello:hello
    }
}

module.exports = testController;

以下是npm start -

上的错误
D:\lab\nodejs_scraper\node_modules\express\lib\router\route.js:202
        throw new Error(msg);
        ^

Error: Route.get() requires callback functions but got a [object Undefined]
    at Route.(anonymous function) [as get] (D:\lab\nodejs_scraper\node_modules\express\lib\router\route.js:202:15)
    at Object.<anonymous> (D:\lab\nodejs_scraper\src\routes\testRoutes.js:7:28)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (D:\lab\nodejs_scraper\app.js:6:18)

问题的可接受解决方案是解决这个问题的方法。

更新3

标记为已解决,因为在控制器中添加res.send()后,旋转问题得到解决。

1 个答案:

答案 0 :(得分:2)

您可以按如下方式分离您的控制器和路线:

<强> server.js

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var routes = require('./routes/index');
var port =5000;
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.use('/',routes);
app.listen(port,function(err){
    console.log("Running port on "+port);
});

<强> route.js

var express = require('express');
var bookCtrl = require('../controllers/bookCtrl');
var router = express.Router();
router.route('/').get(function(req,res){
    res.send('you are on root url');
});
router.route('/book').get(bookCtrl.getBook);
router.route('/allbooks').get(bookCtrl.getAllBooks);
/* Write all you apis here and control them in controller*/
module.exports = router;

<强> bookCtrl.js

module.exports = {
getBook : function(req, res){
   res.send('Get a book')
},
getAllBooks : function(req, res){
   res.send('Get all book');
}
}

图像中的文件夹结构 folder structure