[英]NodeJS w/Express Error: Cannot GET /
這就是我所擁有的,文件名“default.htm”實際上存在並在使用 NodeJS 執行 readFile 時加載。
var express = require('express');
var app = express();
app.use(express.static(__dirname + '/default.htm'));
app.listen(process.env.PORT);
錯誤(在瀏覽器中):
Cannot GET /
您通常希望呈現這樣的模板:
app.get('/', function(req, res){
res.render('index.ejs');
});
但是,您也可以提供靜態內容 - 為此使用:
app.use(express.static(__dirname + '/public'));
現在,項目的/public
目錄中的所有內容都將作為站點根目錄下的靜態內容提供,例如,如果您將default.htm
放在公共文件夾中,如果訪問/default.htm
可用
查看express API和Connect Static 中間件文檔了解更多信息。
您需要定義一個根路由。
app.get('/', function(req, res) {
// do something here.
});
哦,您不能在express.static
指定文件。 它需要是一個目錄。 app.get('/'....
將負責相應地呈現該文件。您可以使用 express' 呈現方法,但是您將不得不添加一些配置選項來告訴 express 您的視圖在哪里,傳統上app/views/
文件夾。
我注意到我忘記了路線開頭的“斜線”,如下所示,我遇到了同樣的錯誤:
錯誤的 :
app.get('api/courses', (req, res) => { ... }
)
正確的 :
app.get('/api/courses', (req, res) => { ... }
)
我有同樣的問題,所以這就是我想出的。 這是我運行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));
如果你有一個像這樣的文件夾樹,你唯一想要使用你擁有的原始語法的時候:
app/
index.html
server.js
其中index.html
位於app/
目錄中,而server.js
位於根目錄中(即與app/
目錄相同級別)。
總的來說,您的代碼可能如下所示:
var express = require('express');
var app = express();
app.use(express.static(__dirname));
app.listen(process.env.PORT);
我發現自己在此頁面上,因為我也收到了Cannot GET/
消息。 我的情況有所不同,因為我使用express.static()
來定位文件夾,正如之前的答案中所提供的那樣,而不是像 OP 那樣的文件。
在對Express 的文檔進行一些挖掘后,我發現express.static()
將其索引文件定義為index.html
,而我的文件被命名為index.htm
。
要將其與 OP 的問題聯系起來,有兩種選擇:
1:使用其他答案中建議的代碼
app.use(express.static(__dirname));
然后將default.htm
文件重命名為index.html
或者
2:調用express.static()
時添加index
屬性,將其指向所需的索引文件:
app.use(express.static(__dirname, { index: 'default.htm' }));
“/”的get方法在哪里?
你也不能直接在 Express 中提供靜態 html。首先你需要配置它。
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);
});
現在添加您的 get 方法。
app.get('/', function(req, res) {
res.render('default.htm');
});
我遇到過同樣的問題。 通過像下面這樣的小改動解決了它。
var express = require('express');
var app = express();
app.use(express.static(path.join(__dirname, 'public')));
var path = require('path');
更改app.use(express.static(__dirname + '/default.htm'));
到app.use(express.static(path.join(__dirname + '/default.htm')));
.
另外,請確保將其指向 default.html 的正確路徑。
就我而言,靜態內容已經提供:
app.use('/*', express.static(path.join(__dirname, '../pub/index.html')));
...應用程序中的所有內容似乎都以某種方式依賴於此。 ( path
dep 是require('path')
)
所以,a) 是的,它可以是一個文件; b) 您可以進行重定向!
app.get('/', function (req, res) { res.redirect('/index.html') });
現在,任何人點擊/
都會從../pub/index.html
靜態獲取/index.html
。
希望這對其他人有幫助。
如果app.get
您需要重新啟動該過程。 按ctl+c
,然后restart
節點應用程序。
您需要向 index.html 文件添加一個返回。
app.use(express.static(path.join(__dirname, 'build')));
app.get('*', function(req, res) {res.sendFile(path.join(__dirname + '/build/index.html')); });
我遇到了與問題中提到的相同的問題。 以下步驟解決了我的問題。
我按照以下步驟升級了 nodejs 包鏈接
清除 NPM 的緩存:
npm cache clean -f
安裝一個名為“n”的小助手
npm install -gn
然后我去node.js網站,下載了最新的node js包,安裝了,問題就解決了。
我有這個確切的問題,但我的錯誤來源可能與您的錯誤來源不同。
但是,就我而言,這是因為我在子文件夾內的 CPanel 上運行應用程序實例為:
app.get("/", (request, response) => {
response.status(200).send("Hello there");
})
結果:
Can not GET /
所以,我意識到我設置了錯誤的參數,我所做的是:
app.get("/foldername/", (request, response) => {
response.status(200).send("Hello there, it works!");
})
結果:
Hello there, it works!
提供完整路徑,例如我在https://ugoods.in/nodeapp上運行我的應用程序
app.get('/nodeapp', (req, res) => {
res.send('Hello World!')
})
如果您將直接在http://ugoods.in或 http://localhost 上運行
app.get('/', (req, res) => {
res.send('Hello World!')
})
另一種解決方案是檢查您的.static()
參數是否引用了其他網站文件(.html、.css、..)的正確文件夾。 此文件夾應位於 server.js 文件的同一目錄中。 不知道為什么,我試圖將它放在不同的目錄中並通過 ./website 例如,但它沒有用。 :/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.