使用 restify (node.js) 提供静态文件
Posted
技术标签:
【中文标题】使用 restify (node.js) 提供静态文件【英文标题】:serving static files with restify (node.js) 【发布时间】:2013-03-06 00:33:17 【问题描述】:我有以下代码:
app.js
[...]
server.get(/\/docs\/public\/?.*/, restify.serveStatic(
directory: './public'
));
server.listen(1337, function()
console.log('%s listening at %s', server.name, server.url);
);
我有以下文件结构
app.js
public/
index.html
所以我尝试浏览:
http://localhost:1337/docs/public/index.html
我明白了
code: "ResourceNotFound",
message: "/docs/public/index.html"
我尝试了几种变体,但似乎都不起作用。
我确定这应该是很明显的我想念的东西
【问题讨论】:
【参考方案1】:restify
将使用directory
选项作为整个路由路径 的前缀。在您的情况下,它将寻找./public/docs/public/index.html
。
【讨论】:
我发现 restify 被记录得很糟糕。【参考方案2】:directory
选项是整个路径的前缀。
相对路径在更高版本的 Restify 中无法正常工作(我测试了 2.6.0-3、2.8.2-3 - 它们都产生 NotAuthorized 错误)
现在的解决方案变成:
server.get(/\/docs\/public\/?.*/, restify.serveStatic(
directory: __dirname
));
然后您的静态文件将需要位于./docs/public
。
(__dirname
是一个全局变量,包含你正在运行的脚本的绝对路径)
【讨论】:
这是为我做的!!__dirname
选项是关键!
OSX 似乎存在一个错误,阻止使用 ./ 语法,所以这是唯一对我有用的东西。谢谢!【参考方案3】:
根据@NdeeJim 的回答,任何想知道如何提供所有静态资源的人:
server.get(/\/?.*/, restify.plugins.serveStatic(
directory: __dirname,
default: 'index.html',
match: /^((?!app.js).)*$/ // we should deny access to the application source
));
【讨论】:
以上是关于使用 restify (node.js) 提供静态文件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Node.JS 的 restify 框架解析/读取多个参数
将 base64 图像字符串转换为可以使用 node.js 提供给浏览器的图像文件
Bot Framework Webchat 无法从 Node.js restify 服务器(在 Azure 上)获取令牌:CORS 策略:不存在“Access-Control-Allow-Origin