2014-10-28 100 views
-1

我不明白我的路由有什麼問題。爲什麼沒有找到資源,如果我用app.js文件定義url模式回調?node.js中的簡單路由

app.get('/myroute', function(req, res) { 
    res.send('Hello /myroute from app.js') 
}); 

var express = require('express'); 

/*var routes = require('./routes/index'); 
var users = require('./routes/users');*/ 

var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 

// uncomment after placing your favicon in /public 
//app.use(favicon(__dirname + '/public/favicon.ico')); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

/*app.use('/', routes); 
app.use('/users', users);*/ 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

app.get('/myroute', function(req, res) { 
    res.send('Hello /myroute from app.js') 
}); 

如果我取消下一行:

var routes = require('./routes/index'); 
var users = require('./routes/users'); 

app.use('/', routes); 
app.use('/users', users); 

而且把我的URL模式回調./routes/index它會工作!

router.get('/myroute', function(req, res) { 
    res.send('Hello/from /route/index.js'); 
}); 

回答

0

在這個非常有趣的帖子https://blog.safaribooksonline.com/2014/03/10/express-js-middleware-demystified/,你可以找到下一個:

中間件是任意數量的由 Express.js路由層最終請求處理程序是之前調用的函數,並由此 坐鎮在原始請求和最終預定路線之間的中間。我們常常把這些功能作爲中間件堆棧,因爲 他們總是在它們加入

因此,如果你要處理404錯誤的順序調用,然後你必須把:

app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

畢竟路由處理程序。

1

您是否在代碼中包含了url模塊?因爲我看不到

require('url'); 

在您提供的代碼中。

我剛剛創建了一個新的node.js項目,幷包含了url模塊。它似乎工作正常,我沒有看到你提到的問題。

如果這沒有解決,也許你可以提供更具體的錯誤代碼?

+0

是的,我用它。就像我想的那樣,我不會包含可能不相關的代碼。我可能找到了答案。 – Ark 2014-10-29 09:39:18

0

我明白了。它與passing request between middleware有關。所以下面如果我打電話next()沒有參數res.send('Hello /myroute from app.js')將被處理。

app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(); // early was next(err) 
}); 

app.get('/myroute', function(req, res) { 
    res.send('Hello /myroute from app.js') 
}); 

或者如果在所有路由下放置路由錯誤處理程序,會更好。