簡體   English   中英

無法從./app.js加載./src/routes/index.js中的路由

[英]Cannot Load Routes in ./src/routes/index.js from ./app.js

這里的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!');
});

我確定我想念什么。 任何幫助表示贊賞!

問題

老實說,我不確定為什么您的操作不起作用。

可以找到該文件,因為否則,Node會引發錯誤,並且您可以從路由文件訪問app的事實意味着該app是可訪問的。

懷疑可能是由於垃圾回收造成的 -因為您沒有持有對模塊的引用,所以它可能會被搶先破壞。

更重要的是,Express中有一個稱為路由器的構造可能正是出於這個確切目的而存在。

雖然我不確定該問題,但我對該解決方案也確定-使用路由器,如下所示:

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

路由器的另一個好處是您不必再污染全局對象。

您需要在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');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM