2017-02-28 78 views
0

我是Node.js中的新手;如果我的问题是不好意思哑:Node.js:如何路由网站地图

我想从服务器返回index.html

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

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

app.get('/elements/hello-world.html', function (req, res) { 
    res.sendFile(path.join(__dirname + '/elements/hello-world.html')); 
}); 

app.listen(1337); 

但也有在存储与本地服务器上的相应结构html文件的许多资产。例如,对于返回/elements/hello-world.html,在本身位于根目录下的元素文件夹下返回hello-world.html就足够了。

但是在index.html中为每个资产(如css es,image s等)编写路径是不合理的。 解决方案是什么?

回答

2

看起来像你想要提供静态文件,以提供静态文件,如图像,CSS文件和JavaScript文件,请使用Express中的express.static内置中间件功能。现在

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

,你可以加载在公共目录下的文件:

http://localhost:3000/images/kitten.jpg 
http://localhost:3000/css/style.css 
http://localhost:3000/js/app.js 
http://localhost:3000/images/bg.png 
http://localhost:3000/hello.html 

从官方文档明确here

+0

谢谢,但什么是公共目录? – Hans

+0

是你想要服务的文件,在你的情况下,可能是“元素”文件夹 –

+0

我添加了'app.use(express.static('elements'));'并删除了路线。现在找不到它。我错过了什么吗? – Hans

1

的解决方案是app.use,像(CoffeeScript的):

app.use express.static(public_dir) 
app.use '/js', express.static(path.join(public_dir, '/js')) 
app.use '/css', express.static(path.join(public_dir, '/css')) 
app.use '/images', express.static(path.join(public_dir, '/images')) 
app.use '/fonts', express.static(path.join(public_dir, '/fonts')) 
app.use '/svgs', express.static(path.join(public_dir, '/svgs')) 

在拉我们的资源,如

<script type="text/javascript" src="/js/primus.js"></script> 
    <script type="text/javascript" src="/js/app_090.js"></script> 

中的index.html实际上,我不知道这回答你的问题,但这是如何在Express中完成资源类型路由。

1

您需要使用快速静态模块服用。

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

在您的nodejs根文件夹中创建一个名为public的文件夹,将您的index.html和您的元素文件夹放入其中。

现在,当您加载http://localhost/index.htmlhttp://localhost/elements/hello-world.html时,它应该没有任何问题。