【nodejs】expressフレーム(一)expressの使用及びexpress.staticの使用に加えて、サーバーパス問題とブラウザ解析過程を解決します.
expressの基本使用
npm init/作成管理文書npm i express-S/-Sは、生産環境下でも使用するカバンを表しています.
express.static(root,[options])
簡単な紹介:expressのstatic静的な方法は、css、img、js、fontなどのファイルの要求を管理するために用いられます.nodejsは他のサーバと違って、デフォルトではファイルを読み込んでクライアントに伝える機能がないので、この方法が必要です.使用:
次は最初の開拓の注意点です.多くの場合、linkの中でhref="を埋める相対パスと絶対パスは要求の差があります.
直接例:
しかし、問題はまた来ました.これまではプロジェクトのルートディレクトリでコマンドラインで実行していたap.jsを通じて、view/のコマンドラインを開けてから、nodeを命令します.
元々はexpress.staticのルートディレクトリはコマンドラインのワークディレクトリに基づいています.つまり、この時にお願いします.http://localhost:8080/index.html加えたapp.use(express.static)の経路は「views」ではなく、コマンドラインのワークディレクトリの下のviewsディレクトリ、つまり/view/viewsというディレクトリに基づいています.このカタログにはもちろんhtmlファイルがありません.
この構造で正常にアクセスしたいなら、express.staticをexpress.static('/')、express.static(')、express.staticをexpress.staticに変更すればいいですが、このように変更するのは面倒ですか?この時、私たちは最初に話したのがexpress.static()に絶対パスを入れるとシステムの絶対パスで静止ファイルディレクトリを確定します.
アプリ.jsのあるディレクトリの絶対パスを取得できる方法がありますか?
nodejsには二つの変数があります.一つは_u u u u udirname、一つは_uです.filenameは、前者はファイルのあるディレクトリの絶対パスを表し、後者はファイル自体の絶対パスを表します.もしひゅうをdirname+'views'はexpress.static()に入れると、固定された静的ファイルのパスがあり、コマンドラインの作業ディレクトリの影響を受けません.
この時やっと問題がなくなった.
二つ目の展開を開始します.express.staticの中のoptionです.
optionは、オブジェクトとしてexpress.staticに伝えられます.例えば、ap.use('/public'、express.static(path.join)、{dotfiles:'allow'))
各オプションについて説明します.
npm init/作成管理文書npm i express-S/-Sは、生産環境下でも使用するカバンを表しています.
var express = require('express');// express
var app = express();// express
app.get('/', function(req, res){
// get '/'
res.send('ok')// 'ok'
})
app.listen(8080, function(){
// 8080 ,
console.log('http://localhost:8080');
})
簡単ではないですか?最初の開拓を始めます.express.static(root,[options])
簡単な紹介:expressのstatic静的な方法は、css、img、js、fontなどのファイルの要求を管理するために用いられます.nodejsは他のサーバと違って、デフォルトではファイルを読み込んでクライアントに伝える機能がないので、この方法が必要です.使用:
app.js
app.use(express.static('./'))
app.js views 、 、
app.use(express.static('views'))
app.use(express.static('./views'))//root /
, '/' , ,
例を挙げます :app.use(express.static('./'))
:http://localhost:8080/index.html , app.js index.html,
:app.use(express.static('views'))
:http://localhost:8080/index.html , app.js 'views' index.html,
http://localhost:8080/index.html http://localhost:8080/views/index.html
css、img、js、fontなどのファイルに対しても例外ではありません.index.の中で一つのcssファイルの第二の例がリンクされている場合://index.html
<link rel="stylesheet" href="/index.css" />// static , 'index.css','/index.css','./index.css'
//app.js
app.use(express.static('./'))
:http://localhost:8080/index.html
// : app.js ./ index.html,
// HTML , DOM
// lnik html , 'index.css'
//
// app.js ./ index.css, , ,
// js ,link css dom ,
( css dom )
( js , js , js , js dom )
( )
// html dom
//dom css ,
// Layout ,
どうやって他の知識点が関連していると思いますか?大丈夫です.知識点を繋げることが重要です.次は最初の開拓の注意点です.多くの場合、linkの中でhref="を埋める相対パスと絶対パスは要求の差があります.
直接例:
/views/index.html
<link rel="stylesheet" href="./index.css" />
/index.css
/app.js
app.use(express.static(./'))
// css ,
// http://localhost:8080/views/index.html index.html , app.js views , index.html
// url http://localhost:8080/views/index.html, index.css
// link href="./index.css" './index.css' url, url
http://localhost:8080/views/index.css
//http://localhost:8080/views/index.css express.static(./') './' http://localhost:8080/views/index.css
// index.css , http://localhost:8080/index.css ,
// index.css , link href '/index.css'
// http://localhost:8080/index.css, , url
第二の例:/views/index.html
<link rel="stylesheet" href="../public/css/index.css" />
/public/css/index.css
/app.js
app.use(express.static('views'))
// http://localhost:8080/index.html
// index.html, index.css
// http://localhost:8080/index.html +../public/css/index.css http://localhost:8080/public/css/index.css
//http://localhost:8080/public/css/index.css ./views http://localhost:8080/views/public/css/index.css
// , './views' views
//
もし上のディレクトリ構造のindex.がindex.cssにアクセスできるようにしたいなら、3番目の例を見てください./views/index.html
<link rel="stylesheet" href="/css/index.css" />
/public/css/index.css
/app.js
app.use(express.static('views'))
app.use(express.static('public'))
// express.static, , 404
//
// http://localhost:8080/index.html
//http://localhost:8080/index.html + views http://localhost:8080/views/index.html index.html
// index.css //http://localhost:8080/index.html+"/css/index.css" +'views' http://localhost:8080/views/index.css
// ,
//http://localhost:8080/index.html+"/css/index.css" +'public' http://localhost:8080/public/index.css
// index.css ,
全体的には、静的ファイルのsrcとhrefは絶対パスを使った方がよく、絶対パスを使った後、htmlファイルをどこに置いてもアクセスできます.しかし、問題はまた来ました.これまではプロジェクトのルートディレクトリでコマンドラインで実行していたap.jsを通じて、view/のコマンドラインを開けてから、nodeを命令します.
元々はexpress.staticのルートディレクトリはコマンドラインのワークディレクトリに基づいています.つまり、この時にお願いします.http://localhost:8080/index.html加えたapp.use(express.static)の経路は「views」ではなく、コマンドラインのワークディレクトリの下のviewsディレクトリ、つまり/view/viewsというディレクトリに基づいています.このカタログにはもちろんhtmlファイルがありません.
この構造で正常にアクセスしたいなら、express.staticをexpress.static('/')、express.static(')、express.staticをexpress.staticに変更すればいいですが、このように変更するのは面倒ですか?この時、私たちは最初に話したのがexpress.static()に絶対パスを入れるとシステムの絶対パスで静止ファイルディレクトリを確定します.
アプリ.jsのあるディレクトリの絶対パスを取得できる方法がありますか?
nodejsには二つの変数があります.一つは_u u u u udirname、一つは_uです.filenameは、前者はファイルのあるディレクトリの絶対パスを表し、後者はファイル自体の絶対パスを表します.もしひゅうをdirname+'views'はexpress.static()に入れると、固定された静的ファイルのパスがあり、コマンドラインの作業ディレクトリの影響を受けません.
let path = require('path')// path.join url
app.use(express.static(path.join(__dirname, 'views')))
app.use(express.static(path.join(__dirname, 'public')))
この際に訪問するhttp://localhost:8080/index.htmlすべて成功することができますが、この時また問題が来ました.cssファイルを要求するたびにviewとpublicファイルを探しに行きます.サーバーの資源を浪費しました.どのような方法でページファイルをviewディレクトリの下に探しに行きますか?cssファイルをpublicに探しに行きます.これはap.use方法を探します.app.use('/abc')方法の意味は、'/abc'で始まるurl要求は全てこの中間部品を通ります.もし設定されていないなら、すべての要求はuse方法を通ります.このように設定します.app.use('/views',express.static(path.join(__dirname, 'views')))
app.use('/public',express.static(path.join(__dirname, 'public')))
最初の/viewsを表すurlはviewファイルの下で最初の/publicのurlを探してpublicファイルの下で検索します.この時やっと問題がなくなった.
二つ目の展開を開始します.express.staticの中のoptionです.
optionは、オブジェクトとしてexpress.staticに伝えられます.例えば、ap.use('/public'、express.static(path.join)、{dotfiles:'allow'))
各オプションについて説明します.
dotfiles:
“allow” - dotfiles , 。
“deny” - , 403, next() 。
“ignore” - dotfile , 404, next() 。
etag:
HTTP ETag , , “304 Not Modified” , , 。
true: 。
false:
extensions:
: , 。
:['html', 'htm']。 html /views/a.asd, /views/index.html
false:
['htm', 'html']: htm html
fallthrough:
false:
true:
immutable:
immutable Cache-Control 。
,maxAge 。
immutable maxAge ,
true: , maxAge ,
false:
index: 。
'index.html': , index.html
false:
lastModified:
Last-Modified
true:
false:
maxAge: Cache-Control max-age ,
,
redirect: , “/”( , )
true:
false:
setHeaders:
function (res, path, stat) {
res.set('x-timestamp', Date.now())
}
res, 。
path, 。
stat, 。