Javascript node server.js-无法获取/

Javascript node server.js-无法获取/,javascript,html,css,angularjs,node.js,Javascript,Html,Css,Angularjs,Node.js,我目前正在做一个项目,这是一个使用angular动态更改DOM元素的网页。项目中有一个公共文件夹,其中包含所有HTML、CSS、JavaScript和JSON对象。项目必须是分布式的,所以我使用节点从localhost运行。这是我的server.js代码: var express = require('express'); var app = express(); var path = require('path'); app.get('/', function(req,res){ re

我目前正在做一个项目,这是一个使用angular动态更改DOM元素的网页。项目中有一个公共文件夹,其中包含所有HTML、CSS、JavaScript和JSON对象。项目必须是分布式的,所以我使用节点从localhost运行。这是我的server.js代码:

var express = require('express');
var app = express();
var path = require('path');

app.get('/', function(req,res){
   res.sendFile(path.join(__dirname + '/public')); 
});

app.listen(8080, function(){
    console.log((new Date()) + " Server is listening on port 8080");
});   

当我前往localhost:8080时,它只是说无法获取/。哪里出了问题?

为静态文件提供服务的正确方法如下:

//Look for statics first
app.use(express.static(path.join(__dirname, 'public')));
//Return the index for any other GET request
app.get('/*', function (req, res) {
    res.sendFile('index.html', {root: path.join(__dirname, 'public')});
});

编辑:另一方面值得一提的是,
app.get
应该是节点中声明的最后一个路由,因此如果您希望API端点公开,请在最后一个
app.get

上声明它们。为静态文件提供服务的正确方法如下:

//Look for statics first
app.use(express.static(path.join(__dirname, 'public')));
//Return the index for any other GET request
app.get('/*', function (req, res) {
    res.sendFile('index.html', {root: path.join(__dirname, 'public')});
});

编辑:另一方面,值得一提的是,
app.get
应该是节点中声明的最后一个路由,因此如果希望API端点公开,请在最后一个
app.get

之前声明它们。您忘记了指向要显示的实际html文件。如果您的公共目录中有index.html,只需指向tot'/public/index.html'。可以(在这里测试)。

您忘记了指向要显示的实际html文件。如果您的公共目录中有index.html,只需指向tot'/public/index.html'。这是可行的(在这里进行了测试)。

遵循用户Muli的答案,所有文件现在都被正确地提供了。代码如下:

var express = require('express');
var app = express();
var path = require('path');

app.use(express.static(path.join(__dirname, 'public')));

app.get('/', function(req,res){
   res.sendFile('index.html', {root: path.join(__dirname, './public')}) 
});

app.listen(8080, function(){
    console.log((new Date()) + " Server is listening on port 8080");
});

按照用户Muli的回答,所有文件现在都已正确送达。代码如下:

var express = require('express');
var app = express();
var path = require('path');

app.use(express.static(path.join(__dirname, 'public')));

app.get('/', function(req,res){
   res.sendFile('index.html', {root: path.join(__dirname, './public')}) 
});

app.listen(8080, function(){
    console.log((new Date()) + " Server is listening on port 8080");
});

您确定要发送
\uu dirname+'/public'
?它不应该是
\uu dirname+'/public/index.html'
或类似的东西吗?它只会发送index.html文件,而不会发送javascript或css的相关文件。我希望为整个公用文件夹提供服务,这样这些文件将与HTML一起呈现。您确定要发送
\uu dirname+'/public'
?它不应该是
\uu dirname+'/public/index.html'
或类似的东西吗?它只会发送index.html文件,而不会发送javascript或css的相关文件。我期待着为整个公共文件夹提供服务,这样这些文件将与htmlhat一起呈现,然后返回index.html的URL,这实际上应该是404错误页面。这会使各种调试变得复杂,因为当你将错误的URL放入(例如)图像或JavaScript文件时,会在开发工具中显示200条OK消息。这是HTML5模式正常工作所必需的。URL应该明确指定(并且应该返回服务器呈现的页面,这些页面可以逐渐增强,否则使用HTML5模式就没有意义了)。遵循Muli的代码,它可以正常工作。页面现在100%工作!非常感谢。@JamesMarshall Osborne-它可以工作,但是
app.get
调用有负面的副作用,不需要解决这个问题。这将返回URL的index.html,而URL实际上应该是404错误页面。这会使各种调试变得复杂,因为当你将错误的URL放入(例如)图像或JavaScript文件时,会在开发工具中显示200条OK消息。这是HTML5模式正常工作所必需的。URL应该明确指定(并且应该返回服务器呈现的页面,这些页面可以逐渐增强,否则使用HTML5模式就没有意义了)。遵循Muli的代码,它可以正常工作。页面现在100%工作!非常感谢。@JamesMarshall-Osborne-它可以工作,但是
app.get
调用有负面的副作用,不需要解决这个问题。
app.get('/',function(req,res){…})是没有意义的。它对app.use(express.static(path.join(uu dirname,'public'))没有任何作用尚未执行。(Muli的代码在路径中有一个
*
,这是有害的,而不是毫无意义的)。
app.get('/',function(req,res){…})是没有意义的。它对app.use(express.static(path.join(uu dirname,'public'))没有任何作用尚未执行。(Muli的代码在路径中有一个
*
,这是有害的,而不是毫无意义的)。