我正在学习使用Node.js.目前,我有一个如下所示的文件夹结构:
index.html
server.js
client
index.html
subs
index.html
page.html
res
css
style.css
img
profile.png
js
page.js
jquery.min.js
server.js是我的网络服务器代码。我使用node server.js
从命令行运行此命令。该文件的内容是:
var restify = require('restify');
var server = restify.createServer({
name: 'Test App',
version: '1.0.0'
});
server.use(restify.acceptParser(server.acceptable));
server.use(restify.queryParser());
server.use(restify.bodyParser());
server.get('/echo/:name', function (req, res, next) {
res.send(req.params);
return next();
});
server.listen(2000, function () {
console.log('%s running on %s', server.name, server.url);
});
如您所见,此服务器依赖于RESTIFY。我被告知必须使用RESTIFY。但是,我无法弄清楚如何提供静态文件。例如,如何在我的应用程序中为* .html,* .css,* .png和* .js文件提供服务?
谢谢!
答案 0 :(得分:42)
server.get(/\/docs\/public\/?.*/, restify.serveStatic({
directory: './public'
}));
但是这将搜索./public/docs/public/
目录中的文件
我更喜欢在这里使用__dirname键:
server.get(/\/public\/?.*/, restify.serveStatic({
directory: __dirname
}));
__dirname
的值等于脚本文件目录路径,该路径假定也是一个文件夹,其中是public
目录。
现在我们将所有/public/.*
个网址映射到./public/
目录。
答案 1 :(得分:8)
根据我目前的解析版(v5.2.0)
<ul class="mainmenu">
<li><a href="javascript:;">Menu1</a>
<ul class="mainmenu__sub mainmenu__sub--red">
<li><a href="javascript:;">Submenu1</a>
<ul class="mainmenu__sub mainmenu__sub--green">
<li><a href="javascript:;">Subsubmenu1</a></li>
<li><a href="javascript:;">Subsubmenu2</a></li>
<li><a href="javascript:;">Subsubmenu3</a></li>
</ul>
</li>
<li><a href="javascript:;">Submenu2</a></li>
<li><a href="javascript:;">Submenu3</a></li>
</ul>
</li>
<li><a href="javascript:;">Menu2</a></li>
<li><a href="javascript:;">Menu3</a></li>
<li><a href="javascript:;">Menu4</a></li>
</ul>
已移至serveStatic
,因此代码将如此
plugins
上面的语法将为文件夹server.get(
/\/(.*)?.*/,
restify.plugins.serveStatic({
directory: './static',
})
)
上的静态文件提供服务。所以你可以获得像static
出于某种原因,如果您想在特定路径下提供静态文件,例如此http://yoursite.com/awesome-photo.jpg
。
代码应重构为此
http://yoursite.com/assets/awesome-photo.jpg
上面的server.get(
/\/assets\/(.*)?.*/,
restify.plugins.serveStatic({
directory: `${app_root}/static`,
appendRequestPath: false
})
)
选项意味着我们不会在文件名中包含appendRequestPath: false
路径
答案 2 :(得分:3)
从Restify 7获取路线no longer take full regexes,因此如果您希望/public/stylesheet.css
提供文件./public/stylesheet.css
,您的代码现在将如下所示:
server.get('/public/*', restify.plugins.serveStatic({
directory: __dirname,
}))
这是因为Restify 7有一个新的(可能更快的)路由后端:find-my-way
答案 3 :(得分:1)
这就是我如何在restify中提供静态文件
server.get(/\/public\/docs\/?.*/, restify.plugins.serveStatic({
directory: __dirname,
default: 'index.html'
}));
公共访问路径为:example.com/public/docs/index.html
答案 4 :(得分:0)
我最近刚遇到过这个问题,所以虽然这对你有帮助,但它可以帮助那些遇到麻烦的人。
当您将Restify声明为const restify = require('restify');
时,serveStatic方法将位于plugins对象中,因此使用restify.serveStatic
将会悄然失败。访问该方法的正确方法是restify.plugins.serveStatic
。
您可以在此处找到更新文档:http://restify.com/docs/plugins-api/#serve-static
答案 5 :(得分:0)
server.get('/', function(req, res, next) {
fs.readFile(__dirname + '/index.html', function (err, data) {
if (err) {
next(err);
return;
}
res.setHeader('Content-Type', 'text/html');
res.writeHead(200);
res.end(data);
next();
});
});
答案 6 :(得分:0)
试试这个:这里的视图是一个静态资源目录名
server.get('/\/.*/', restify.plugins.serveStatic({
directory: __dirname + "/view/",
default: './home.html'
})
);