2012-11-12 10 views
28

यह मेरे पास है, फ़ाइल नाम "default.htm" वास्तव में मौजूद है और पढ़ने के दौरान लोड करता है NodeJS के साथ फ़ाइल।नोडजेएस डब्ल्यू/एक्सप्रेस त्रुटि: प्राप्त नहीं हो सकता/

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

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

app.listen(process.env.PORT); 

त्रुटि (ब्राउज़र में):

Cannot GET/
+3

क्या कोई उत्तर आपकी मदद करता है, या आपने अपनी समस्या को हल किया है? कृपया साझा करें .. – knownasilya

उत्तर

8

आप एक रूट मार्ग को परिभाषित करने की जरूरत है।

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

ओह और आप express.static भीतर एक फ़ाइल निर्दिष्ट नहीं कर सकते। इसे एक निर्देशिका होना चाहिए। app.get('/'.... तदनुसार उस फ़ाइल को प्रस्तुत करने के लिए ज़िम्मेदार होगा। आप एक्सप्रेस 'रेंडर विधि का उपयोग कर सकते हैं, लेकिन आपको कुछ कॉन्फ़िगरेशन विकल्प जोड़ना होगा जो आपके विचारों को व्यक्त करेंगे, पारंपरिक रूप से app/views/ फ़ोल्डर में। इसलिए का उपयोग करने के लिए -

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

हालांकि आप भी स्थिर सामग्री वितरित कर सकते हैं:

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

अब अपनी परियोजना के /public निर्देशिका में सब कुछ होगा

24

आप आमतौर पर इस तरह टेम्पलेट्स को रखना चाहते हैं अपनी साइट की जड़ पर स्थैतिक सामग्री के रूप में वितरित किया जाना चाहिए यदि आप सार्वजनिक फ़ोल्डर में default.htm रखना पड़ता है जब /default.htm

अधिक जानकारी के लिए express API और Connect Static middleware डॉक्स पर एक नज़र डालें पर जाकर उपलब्ध हो जाएगा।

+0

कोणीय के लिए यह कैसे करें? – nottinhill

+2

@ सरबैनबेन्जी - यह कोणीय के लिए नहीं किया जा सकता क्योंकि यह एक्सप्रेस में एक कॉन्फ़िगरेशन है। – Ben

3

"/" के लिए आपकी विधि कहां है?

इसके अलावा आप सीधे एक्सप्रेस में स्थिर एचटीएमएल की सेवा नहीं कर सकते। सबसे पहले आपको इसे कॉन्फ़िगर करने की आवश्यकता है।

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

}); 

अब अपनी विधि प्राप्त करें।

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

मैं एक ही समस्या का सामना करना पड़ रहा था के रूप में प्रश्न में उल्लेख किया है। निम्नलिखित चरणों में मेरी समस्या हल हो गई।

मैं निम्नलिखित चरणों का

साथ NodeJS पैकेज लिंक उन्नत बनाया
  1. साफ़ NPM का कैश:

    npm cache clean -f 
    
  2. एक छोटे सहायक बुलाया स्थापित करें 'एन'

    npm install -g n 
    

तब मैं node.js गया था वेबसाइट, नवीनतम नोड जेएस पैकेज डाउनलोड किया, इसे स्थापित किया, और मेरी समस्या हल हो गई थी।

+0

@knownasaliya यह उत्तर आपके लिए है –

1

मुझे एक ही समस्या थी, इसलिए मैं यहां आया हूं।यह वही है मेरा फ़ोल्डर संरचना की तरह दिखाई देता है जब मैं node server.js

app/ 
    index.html 
    server.js 

भाग गया __dirname पथ को प्रिंट करने के बाद है, मुझे एहसास हुआ कि __dirname पथ था, जहां अपने सर्वर (app/) चल रहा था।

तो, आपके सवाल का जवाब यह है:

अपने server.js फ़ाइल एक ही फ़ोल्डर में है फ़ाइलों के रूप में आप, रेंडर करने के लिए कोशिश कर रहे हैं तो

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

वास्तव में होना चाहिए

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

एकमात्र समय जब आप मूल वाक्यविन्यास का उपयोग करना चाहते हैं घ यदि आप ऐसा तरह एक फ़ोल्डर ट्री था होगा: जबकि server.js रूट निर्देशिका में है,

app/ 
    index.html 
server.js 

जहां index.htmlapp/ निर्देशिका में नहीं है (यानी app/ निर्देशिका के समान स्तर)।

कुल मिलाकर, अपने कोड दिखाई दे सकता है जैसे:

var express = require('express'); 

var app = express(); 

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

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

मैं अपने आप को इस पृष्ठ पर पाया के रूप में मैं भी Cannot GET/ संदेश प्राप्त था। मेरी परिस्थितियों में भिन्नता थी क्योंकि मैं फ़ोल्डर को लक्षित करने के लिए express.static() का उपयोग कर रहा था, जैसा कि पिछले उत्तरों में दिया गया है, और ओपी के रूप में फ़ाइल नहीं है।

क्या मैं Express' docs के माध्यम से कुछ खुदाई के बाद पता चला कि express.static()index.html के रूप में अपनी सूची फाइल में परिभाषित करता है, जबकि मेरी फाइल index.htm नामित किया गया था है।

ओपी के सवाल को यह टाई करने के लिए, वहाँ दो विकल्प हैं:

1: का प्रयोग करें कोड अन्य उत्तर

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

और उसके बाद में सुझाव दिया index.html

या

को default.htm फ़ाइल का नाम बदलें

2: पर कॉल करने के लिए index संपत्ति जोड़ें वांछित अनुक्रमणिका फ़ाइल:

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

इसके लिए धन्यवाद यह मेरी समस्या को ठीक करता है। किसी कारण से index.html विंडोज़ में ठीक था लेकिन मुझे इसे लिनक्स में निर्दिष्ट करना था। –

0

मुझे एक ही समस्या थी। इसे नीचे छोटे बदलावों द्वारा हल किया गया।

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

गॉट से here (ExpressJS Documentation - Serving static files).

1
var path = require('path'); 

बदलें app.use(express.static(__dirname + '/default.htm')); app.use(express.static(path.join(__dirname + '/default.htm'))); को मदद करते हैं।

इसके अलावा, सुनिश्चित करें कि आप इसे डिफ़ॉल्ट.html के सही रास्ते पर इंगित करें।

0

मेरे मामले में, स्थिर सामग्री को पहले से ही कार्य किया जा रहा था: अनुप्रयोग में

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

... और सब कुछ किसी तरह से उस पर भरोसा करने के लिए लग रहा था। (path dep require('path'))

तो, ए) हाँ, यह एक फ़ाइल हो सकती है; और बी) आप make a redirect कर सकते हैं!

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

अब किसी को भी मार / हो जाता है /index.html जो स्थिर ../pub/index.html से परोसा जाता है।

उम्मीद है कि यह किसी और की मदद करेगा।

संबंधित मुद्दे