繁体   English   中英

Express app.js是否在每个请求上都运行?

[英]Express Does app.js get ran on every request?

我正在用非常标准的东西构建一个快速服务器。 我一直无法使express.router()正确执行我的路由,这导致我更深入地研究了从运行Express应用程序的服务器请求页面时的实际情况。

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'));

因此,我对幕后发生的事情越来越感兴趣。 我注意到服务器仅在第一个请求bodyParserbodyParser不相关的输出记录到终端。 即,尽管bodyParser正确记录了每个请求实例的请求,但文件顶部的console.log仅在应用程序启动时才运行,而从不运行。

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

知道这一点将很有帮助,以弄清楚为什么我的router未使用正确的路由进行响应。

谢谢一群!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM