【发布时间】: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