[英]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.