簡體   English   中英

帶有 Express 錯誤的 NodeJS:無法獲取 /

[英]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 APIConnect 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')));

這里得到幫助(ExpressJS 文檔 - 提供靜態文件)。

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 包鏈接

  1. 清除 NPM 的緩存:

     npm cache clean -f
  2. 安裝一個名為“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.

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