繁体   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