【问题标题】:Cannot GET /about.html express/nodejs无法获取 /about.html express/nodejs
【发布时间】:2015-11-25 05:58:41
【问题描述】:

我正在尝试使用 express 和 body-parser 库来创建一个简单的节点服务器。正如我在下面的示例中所述,它不支持静态文件。我犯了什么错误?请帮助我。

server.js

 var express = require("express");
var bodyParser =require("body-parser");
var app = express();
//Here we are configuring express to use body-parser as middle-ware.
app.use(bodyParser.urlencoded({extended:false}));

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

app.listen(3000,function()
{
console.log("Server started on Port 3000"); 
});

Package.json

{
  "name": "blog post",
  "version": "0.0.1",
  "description": "Package.josn for node server",
  "repository": {
    "type": "git",
    "url": ""
  },
  "private": true,
  "dependencies": {
    "body-parser": "^1.14.1",
    "express": "^4.13.3"
  }
}

我已按照建议更新了我的 server.js。

server.js(更新)

var express = require("express");
var bodyParser =require("body-parser");
var app = express();
//Here we are configuring express to use body-parser as middle-ware.
//app.use(bodyParser.urlencoded({extended:false}));
app.use(express.static(__dirname + '/public'));

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

app.listen(3000,function()
{
console.log("Server started on Port 3000"); 
});

工作版本 server.js

var express = require("express");
var bodyParser =require("body-parser");
var app = express();
//Here we are configuring express to use body-parser as middle-ware.
//app.use(bodyParser.urlencoded({extended:false}));
app.use(express.static(__dirname + '/'));

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

app.listen(3000,function()
{
console.log("Server started on Port 3000"); 
});

【问题讨论】:

  • 请不要将您最初在问题中的代码更改为现在包含人们推荐的内容。这会掩盖您提出的原始问题,并使根据原始问题提供的答案无效。如果您已经采纳了一些建议,但现在仍然卡住,您可以为您的问题添加新信息。
  • @jfriend00 我已经按照你的建议更新了我的问题。请帮助我克服这个问题。作为资深会员,如果能推荐 StackOverflow 允许在 cmets 区域进行编码格式化,那就太好了。在 cmets 区添加代码非常困难。
  • 非常感谢@jfriend00。在我删除公众后它工作正常。

标签: javascript node.js express frontend mean-stack


【解决方案1】:

在将文件用作来自expressjs 服务器的静态文件之前,您需要将它们公开,如下所示 -

app.use(express.static('public'));

这会将您的public 目录作为静态目录。把你所有的静态文件放在public 目录中并服务。

如果您想从多个目录提供服务,您可以执行以下操作 -

app.use(express.static('public'));
app.use(express.static('files'));

更多信息 - http://expressjs.com/starter/static-files.html

【讨论】:

  • 我已经按照您的建议更新了我的 server.js(请参阅我上面的问题),但得到了同样的错误。
【解决方案2】:

您显示的唯一路线是:

app.get('/',function(req,res)

这是网址:localhost:3000/

但是,您图片中的 URL 是 localhost:3000/about.html,您没有路由。因此,您可以为该特定 URL 创建路由,也可以使用 express.static() 自动提供来自特定目录的文件。

Express 不会自动提供任何文件(与其他一些 Web 服务器不同),因此您想要提供的任何文件都必须有一个处理它的路由(单独或处理多个文件的路由)。

【讨论】:

  • 我已将 server.js 代码更改如下,但仍然出现相同的错误。 var express = require("express"); var bodyParser =require("body-parser"); var app = express(); //这里我们将express配置为使用body-parser作为中间件。 //app.use(bodyParser.urlencoded({extended:false})); app.use(express.static(__dirname + '/public')); app.get('/',function(req,res) { res.sendfile("index.html"); }); app.listen(3000,function() { console.log("服务器在 3000 端口启动"); });
  • @user5555457 - 多行代码在 cmets 中完全不可读。您可以使用问题下方的“编辑”链接将新代码添加到问题的末尾(不要更改以前的内容),然后发表评论告诉人们您已在问题中添加了一些新信息。不要删除您最初提出的问题,因为这会使您迄今为止获得的所有答案无效,这对为您提供您已经使用过的良好信息的人是不公平的。如果您的应用仍然无法运行,那么您可以在问题中添加新信息来解释您当前遇到的问题。
  • @user5555457 - 您添加了app.use(express.static(__dirname + '/public'));,但您的index.html 看起来不像位于脚本目录下的public 子目录中。
  • 您不应该在脚本目录中使用 express.static,因为它也会为您的 node.js 脚本提供服务。将您的公共文件自己移动到公共子目录并指向 express.static。
  • 知道了。我会的。非常感谢您的持续帮助。
猜你喜欢
  • 2018-07-01
  • 2012-10-31
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 2018-06-17
相关资源
最近更新 更多