Javascript Can';我不能让快速路由器工作
我目前在空闲时间进入NodeJS,我试图通过尽可能多地将内容拆分为模块来建立一个简单的项目来使用Node和GraphQL,这让我 我遇到的问题是,通过Express定义的任何路线都不会被触发。页面将永远加载,直到超时,并且日志消息不会打印到服务器控制台。 以下是服务器入口点的代码:Javascript Can';我不能让快速路由器工作,javascript,node.js,web,Javascript,Node.js,Web,我目前在空闲时间进入NodeJS,我试图通过尽可能多地将内容拆分为模块来建立一个简单的项目来使用Node和GraphQL,这让我 我遇到的问题是,通过Express定义的任何路线都不会被触发。页面将永远加载,直到超时,并且日志消息不会打印到服务器控制台。 以下是服务器入口点的代码: // index.js const appConfig = require('./config'); const express = require('express'); var app = express();
// index.js
const appConfig = require('./config');
const express = require('express');
var app = express();
// Set up configuration variables according to the current execution environment
const environment = appConfig.environment;
const config = appConfig[environment];
const defaultPort = config.app.port;
const logLevel = config.app.logLevel;
// Set up modules
const logger = require('./src/logger')('server', logLevel);
const db = require('./src/db')(config);
const handler = require('./src/handler')(db);
const routes = require('./src/routes')(handler);
// Set up routes
app.use('/', routes);
// Start listening
const server = app.listen(process.env.PORT || defaultPort, function() {
const port = server.address().port;
logger.log('info', 'App now listening to port ' + port);
});
以及路由模块:
// src/routes/index.js
const logger = require('../logger')('routes');
const bodyParser = require('body-parser');
const express = require('express');
const router = express.Router();
module.exports = function(handler) {
logger.log('info', 'Setting up routes.')
router.use(bodyParser.json);
router.get('/', (req, res) => {
logger.log('info', '/');
res.send('Home Page');
});
router.get('/quotes', (req, res) => {
logger.log('info', '/quotes');
res.send('/quotes');
});
return router;
}
传递给routes的处理程序
用于保存routes将调用的函数
很明显,我遗漏了一些东西,但我不知道是什么,所以如果有人有任何想法,我将不胜感激
快速提示:如果我将app
传递给路由模块并调用app。在返回路由器之前使用('/',路由器)
,它工作正常。但这完全违背了将其分为两个模块的目的。尝试以下方法:
router.get('/', (req, res){
logger.log('info', '/');
res.render('index', {
title: 'Home'
});
});
你需要这样做。
要解决问题,只需改变
router.use(bodyParser.json);
到
它无法工作的原因是bodyParser.json
是一个函数。当您将其作为函数调用时,它将返回express的适当中间件。如果不将其作为函数调用,它将引用返回中间件的函数。要继续,您必须在express中间件中调用next()
,但如果您不将bodyParser.json
作为函数调用,它将永远不会调用next()
不幸的是,这一点运气不好。路线中的日志信息一开始就没有打印出来,所以我很肯定路线根本没有被呼叫。哦,拜托,事实上就是这样,我不敢相信我错过了。我也很惊讶这没有引起任何错误或警告。无论如何,非常感谢!
router.use(bodyParser.json());