无法从./app.js

时间:2015-07-23 20:54:48

标签: javascript node.js express

这里的nodejs非常新。我试图在app.js中放置路线没有问题。但是,在将所有路由移动到PROJECT_DIR/src/routes/index.js下的单独文件后,然后我在浏览器中打开页面时会显示“无法获取/wines”。以下是app.jssrc/routes/index.js中的代码:

// app.js
var express = require('express');
var app = express();
var path = require('path');

global.app = express();
require('./src/routes/index');
// also tried: require(path.join(__dirname, './src/routes/index'));

global.server = app.listen(3000, '0.0.0.0', function () {
  var host = server.address().address;
  var port = server.address().port;

  console.log('Example app listening at http://%s:%s', host, port);
});
// ./src/routes/index.js
// tried console.error(app); and it printed all the stuff about app in the server log
app.get('/wines', function(req, res) {
  res.send([{name:'w1'}, {name:'w2'}]);
});

app.get('/', function (req, res) {
  res.send('Hello World!');
});

我确定我错过了什么。任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:1)

<强>问题

老实说,我不确定你为什么做不起作用。

可以找到 文件,否则,Node会抛出错误,并且您可以从路径文件访问app这一事实意味着可以访问app

怀疑可能归因于garbage collection - 因为您没有对该模块的引用,它可能会被抢先销毁。

更重要的是,Express中有一个名为router的构造,可能出于此目的而存在。

<强>解决方案

虽然我不确定我 确定解决方案的问题 - 请使用路由器,如下所示:

var express = require('express');

var router = express.Router();

router.get('/wines', function(req, res) {
  res.send([{name:'w1'}, {name:'w2'}]);
});

router.get('/', function (req, res) {
  res.send('Hello World!');
});

module.exports = router;

然后在您的app.js文件中,执行以下操作:

var routes = require('./routes/index');
app.use('/', routes);

路由器的另一个好处是您不必再污染全局对象了..

答案 1 :(得分:0)

您需要在index.js中使用export

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index');
});

module.exports = router;

并在app.js

中使用它
var router = require('./src/routes/index');