2012-11-12 24 views
28

Bu benim sahip olduğum şey, "default.htm" dosya adı aslında var ve NodeJS ile readFile yapılırken yüklenir.NodeJS w/Express Hatası: GET olamaz/

var express = require('express'); 
var app = express(); 

app.use(express.static(__dirname + '/default.htm')); 

app.listen(process.env.PORT); 

(tarayıcıda) Hata:

Cannot GET/
+3

Yanıtlardan herhangi biri size yardımcı oldu mu, yoksa sorununuzu başka bir şekilde çözdünüz mü? Lütfen paylaşın .. – knownasilya

cevap

8

Bir kök rota tanımlamak gerekir.

app.get('/', function(req, res) { 
    // do something here. 
}); 

Oh ve express.static içinde bir dosya belirleyemezsiniz. Bir dizin olması gerekiyor. app.get('/'.... bu dosyayı uygun şekilde işlemekten sorumlu olacaktır. Express 'render yöntemini kullanabilirsiniz, ancak geleneksel olarak app/views/ klasöründe görünümlerinizin nerede olduğunu ifade edecek bazı yapılandırma seçenekleri eklemeniz gerekir. böylece kullanmak yapmak -

app.get('/', function(req, res){ 
    res.render('index.ejs'); 
}); 

ayrıca statik içerik sunabilirsiniz Ancak:

app.use(express.static(__dirname + '/public')); 

Şimdi projenizin /public dizinde her şey olacak

24

Genellikle böyle şablonları işlemek istiyorum sitenizin kökünde statik içerik olarak teslim edilmesi Ortak klasörde default.htm yerleştirirseniz /default.htm

fazla bilgi için express API ve Connect Static middleware dokümanlar aracılığıyla bir göz atın ziyaret ederek satışa sunulacak eğer.

+0

Açısal olarak nasıl yapılır? – nottinhill

+2

@SirBenBenji - bu Angular için yapılamaz çünkü Express'te bir yapılandırma. – Ben

3

"/" için alma yönteminiz nerede?

Ayrıca doğrudan Express.First'te statik html sunamazsınız, bunu yapılandırmanız gerekir.

app.configure(function(){ 
    app.set('port', process.env.PORT || 3000); 
    app.set("view options", {layout: false}); //This one does the trick for rendering static html 
    app.engine('html', require('ejs').renderFile); 
    app.use(app.router); 

}); 

Şimdi get yönteminizi ekleyin.

app.get('/', function(req, res) { 
    res.render('default.htm'); 
}); 
0

Soruda belirtildiği gibi aynı sorunla karşı karşıya kalıyordum. Aşağıdaki adımlar sorunumu çözdü.

aşağıdaki adımlarla

ile nodejs paket bağlantısını yükseltilmiş
  1. Temizle UÖM'nin cache:

    npm cache clean -f 
    
  2. adlı küçük bir yardımcı kurun 'n'

    npm install -g n 
    

Sonra node.js'ye gittim web sitesi, en son düğüm js paketini indirdi, yükledi ve benim sorunum çözüldü.

+0

@knownasaliya Bu cevap sizin için hazır –

1

Ben de aynı problemi yaşadım.Bu benim __dirname yolunu yazdırmadan sonra node server.js

app/ 
    index.html 
    server.js 

çalıştırdığınızda benim klasör yapısı neye benzediğini, ben benim sunucu (app/) çalıştıran nerede __dirname yol olduğunu fark etti.

Yani, sorunun cevabı şudur: Eğer, sonra işlemek için çalışıyoruz dosyaları olarak server.js dosyası aynı klasörde ise

app.use(express.static(__dirname + '/default.htm')); 

aslında olmalıdır

app.use(express.static(__dirname)); 

Kullandığınız orijinal sözdizimini kullanmak istediğiniz tek zaman. Bunu gibi bir klasör ağacı olsaydı d olacaktır: index.htmlapp/ dizinde

app/ 
    index.html 
server.js 

server.js kök dizininde ise, (yani app/ dizini ile aynı seviyede). Bu sayfadaki buldum

var express = require('express'); 

var app = express(); 

app.use(express.static(__dirname)); 

app.listen(process.env.PORT); 
3

Ben de Cannot GET/ mesajı aldıktan gibi: gibi

Genel olarak, kod görünebilir. Koşullarım, önceki yanıtlarda sunulduğu gibi, bir dosyayı hedeflemek için express.static() kullanıyordum ve OP gibi bir dosya kullanmıyordu. Ben Express' docs aracılığıyla bazı kazmaya sonra Keşifleriniz

benim dosya index.htm seçildi oysa express.static(), index.html olarak dizin dosyasını tanımlar olmasıdır.

1:

iki seçenek vardır, OP soruya bu kravat için kullanın kod index.html

veya

için default.htm dosyayı yeniden adlandırmak diğer yanıtlar daha sonra
app.use(express.static(__dirname)); 

ve önerilen

2: express.static() numaralı telefonu çağırmak için index özelliğini ekleyin. İstenen dizin dosyası:

app.use(express.static(__dirname, { index: 'default.htm' })); 
+0

Bunun için teşekkürler benim sorunumu giderdi. Bazı nedenlerle Index.html pencerelerde iyiydi ama ben linux içinde belirtmek zorunda kaldım. –

1
var path = require('path'); 

Change'ye app.use(express.static(__dirname + '/default.htm')); app.use(express.static(path.join(__dirname + '/default.htm'))); için

var express = require('express'); 
var app = express(); 
app.use(express.static(path.join(__dirname, 'public'))); 

Got yardımı.

Ayrıca, onu default.html dosyanızın doğru yoluna ayarladığınızdan emin olun. Benim durumumda

0

, statik içerik zaten sunulmakta: app

app.use('/*', express.static(path.join(__dirname, '../pub/index.html'))); 

... ve her şey bir şekilde o güvenmek gibiydi. (path dep: require('path'))

Yani, a) evet, bir dosya olabilir; ve b) make a redirect yapabilirsiniz!

app.get('/', function (req, res) { res.redirect('/index.html') }); 

Şimdi herkes /../pub/index.html gelen statik sunulmaktadır /index.html alır isabet. Umarım bu başka birine yardımcı olur.