快递每次请求都会运行app.js吗?

时间:2015-08-14 06:17:39

标签: javascript node.js express

我正在构建一个具有相当标准功能的快速服务器。我无法让express.router()正确执行我的路由,这使我更深入地了解从运行快速应用程序的服务器请求页面时实际发生的情况。

console.log('App.JS has ran!');
var http = require('http');
var express = require('express');
var app = express();
var server = http.createServer(app);
var mongoose = require('mongoose');
mongoose.connect('mongodb://52.27.161.16');
mongoose.connection.on("connect",function(err) { 
  if (err) throw err;
  console.log('hello found!');
});
var bodyParser = require('body-parser');
app.use(bodyParser.json());
var router = express.Router();
router.get('/hi'), function (req, res) {
    res.send('/hi route response');
};
router.get('/', function(req, res) {
  res.send('default route reached');
});
app.use('*', router);
server.listen(config.server.listenPort);

非常标准的东西 - 但出于某种原因,每当我导航到localhost时:port / hi我只从res路径获取/,即router.get('/', function{} (res.send('default route reached'));

因此,我对幕后发生的事情越来越感兴趣。我注意到服务器只在第一个请求中向终端登录与bodyParser无关的输出。即,文件顶部的console.log仅在应用程序启动时运行,并且永远不会在bodyParser正确记录每个请求实例的请求之后运行。

当向服务器发出请求时,究竟发生了什么? app对象和路由是否已缓存并正在提供?为什么app.js没有在每个请求上重新评估?只有router对象负责发送请求吗?

了解这一点会很有帮助,找出我的router没有使用正确路线做出回应的原因。

非常感谢!

1 个答案:

答案 0 :(得分:2)

app对象是您正在创建的快速应用程序。它基本上是快递模块的包装器,包括所有快速功能。它基本上减少了处理对服务器的请求,呈现HTML视图,注册模板引擎等所需的代码。此app对象被传递给您正在创建的服务器对象,服务器会持续侦听端口中的请求您已配置。因此,当服务器运行时,app对象只启动一次,而对服务器的请求则由节点事件循环处理。