33

我正在学习使用 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 文件?

谢谢!

4

7 回答 7

46

文档中:

server.get(/\/docs\/public\/?.*/, restify.plugins.serveStatic({
  directory: './public'
}));

但这将搜索目录中的./public/docs/public/文件。
如果您不想将请求路径附加到它,请使用appendRequestPath: false选项。

我更喜欢在这里使用__dirname键:

server.get(/\/public\/?.*/, restify.plugins.serveStatic({
    directory: __dirname 
}));

的值__dirname等于脚本文件目录路径,假设也是一个文件夹,其中是public目录。

现在我们将所有/public/.*url 映射到./public/目录。


现在还存在serveStaticFiles插件:

server.get('/public/*', // don't forget the `/*`
     restify.plugins.serveStaticFiles('./doc/v1')
); // GET /public/index.html -> ./doc/v1/index.html file
于 2013-10-09T20:17:52.973 回答
10

根据我目前的restify版本(v5.2.0)

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意味着我们不在assets文件名中包含路径

于 2017-10-11T11:22:26.870 回答
7

从 Restify 7 开始,路由不再采用完整的正则表达式,所以如果你想/public/stylesheet.css提供文件./public/stylesheet.css,你的代码现在看起来像这样:

server.get('/public/*', restify.plugins.serveStatic({
  directory: __dirname,
}))

这是因为 Restify 7 有一个新的(可能更快的)路由后端:find-my-way

于 2018-06-18T13:31:24.897 回答
2

这就是我在 restify 中提供静态文件的方式

server.get(/\/public\/docs\/?.*/, restify.plugins.serveStatic({

          directory: __dirname,

          default: 'index.html'

        }));

公共访问路径将是:example.com/public/docs/index.html

于 2018-04-04T12:19:18.887 回答
1

我最近遇到了这个问题,所以虽然这可能对您没有帮助,但它可以帮助其他遇到问题的人。

当您将 Restify 声明为const restify = require('restify');时,serveStatic 方法将在插件对象中,因此使用restify.serveStatic将悄悄地失败。访问该方法的正确方法是restify.plugins.serveStatic.

您可以在此处找到更新文档:http ://restify.com/docs/plugins-api/#serve-static

于 2017-09-11T19:45:54.820 回答
1
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();
    });
});
于 2017-10-24T09:25:39.457 回答
0

试试这个:这里的视图是一个静态资源目录名

server.get('/\/.*/', restify.plugins.serveStatic({

    directory: __dirname + "/view/",
    default: './home.html' 

   })
);
于 2017-11-14T09:49:07.963 回答