【问题标题】:Express Does app.js get ran on every request?Express app.js 在每个请求上都会运行吗?
【发布时间】:2015-08-14 14:37:25
【问题描述】:

我正在用非常标准的东西构建一个快速服务器。我一直无法让 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 没有以正确的路线响应。

非常感谢!

【问题讨论】:

  • 当您说您导航到 /hi 时,是在浏览器中,还是您实际上是在发送帖子请求?
  • 您是否通过浏览器执行 get 或 post 请求??
  • 轻微错误,其实是.get。固定的!感谢您了解这一点。
  • 对于剩下的问题,每次有人向您的服务器发出请求时,只有中间件 (app.use) 和路由器会受到影响。仅当您第一次引导应用程序时才会在顶部初始加载需求。
  • 好消息!我假设这是通过 app 对象通过 http.createServer(app) 方法传递的。

标签: javascript node.js express


【解决方案1】:

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

【讨论】:

  • 这是一个很好的解释。
猜你喜欢
  • 2011-09-05
  • 2021-04-21
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
  • 2023-02-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
相关资源
最近更新 更多