だから私はノードに慣れていないので、express
ライブラリを使用する方法を学ぼうとしています。ただし、私が理解しようとしている問題は、_/public
_フォルダー内のファイルが静的コンテンツとして提供されていないように見える理由です。
私のコードは次のとおりです。
_var http = require('http');
var port = process.env.port || 1337;
var express = require('express');
var handlebars = require('express3-handlebars');
var path = require('path');
var application = express();
application.use(express.static(path.join(__dirname, 'public')));
application.engine('handlebars', handlebars({ defaultLayout: 'main' }));
application.get('/', function(req, res){
res.render('index.handlebars', { someProp: 3 });
});
application.listen(port);
_
そして私のディレクトリ構造:
_/
- server.js (the above referenced file)
/ Views
- index.handlebars
/ Layouts
- main.handlebars
/ public
- ServeMe.txt
_
私の理解では、application.use(express.static(path.join(__dirname, 'public')));
は、見つかった場合、そのリソースを使用してパブリックフォルダーの下のすべての要求に応答するようにサーバーを構成することになっています。私は何を間違えていますか?面白いことに、ハンドルバーをビューエンジンとして構成する方が、このパブリックフォルダーを機能させるよりも簡単でした= D
編集:私が要求しようとしている完全なURL:_http://localhost:1337/public/serveme.txt
_
大文字と小文字の区別(これは問題ではないはずです)を試しましたが、それもうまくいきませんでした。
要求しようとしている完全なURL:
http://localhost:1337/public/serveme.txt
それはあなたの問題だ。静的コンテンツとして指定したディレクトリ内のすべてのものは、ベースURLから直接利用可能になります。代わりにhttp://localhost:1337/serveme.txt
を要求する必要があります。
/public
の静的ファイルのみを提供する場合は、文字列を最初の引数として渡すことができます。
application.use("/public", express.static(path.join(__dirname, 'public')));
app.use(express.static(__dirname + '/public'));
この行は、アプリのルートURLでパブリックフォルダーを提供します。つまり、次のリクエストは有効であり、404エラーは発生しません。
// GET /javascripts/jquery.js // GET /style.css // GET /favicon.ico
app.useはオプションの最初の引数も取ります。これにより、コンテンツを提供するリクエストURLを指定できます。この最初の引数のデフォルトは「/」です。つまり、静的コンテンツはベースURLで提供されます。現在のコードのように、ルートレベルではなく静的コンテンツを提供したい場合は、次の例を確認してください(再びドキュメントから引用)
app.use('/static', express.static(__dirname + '/public'));
この行は再びパブリックフォルダーを提供しますが、アプリの/ static URLで次のリクエストを404エラーなしで有効にします。
(URLの例:http://localhost:1337/static/anythingInYourPublicFolder
)
// GET /static/javascripts/jquery.js // GET /static/style.css // GET /static/favicon.ico
どのURLをロードしようとしていますか? not URLに「public」を含める必要があるため、curl -v 'http://localhost:1337/ServeMe.txt'
。