私がするなら
res.sendfile('public/index1.html');
それから私はサーバーコンソールの警告を受けます
廃止予定の
res.sendfile
を表現する:代わりにres.sendFile
を使用する
しかし、それはクライアント側ではうまく機能します。
しかし、私はそれをに変更すると
res.sendFile('public/index1.html');
エラーが出ます
TypeError:pathは絶対パスであるか、
res.sendFile
にrootを指定する必要があります
index1.html
はレンダリングされません。
絶対パスが何であるか私は理解することができません。 server.js
と同じレベルにpublic
ディレクトリがあります。私はres.sendFile
からserver.js
をやっています。私はまたapp.use(express.static(path.join(__dirname, 'public')));
を宣言しました
私のディレクトリ構造を追加する:
/Users/sj/test/
....app/
........models/
....public/
........index1.html
ここで指定する絶対パスは何ですか?
Express 4.xを使用しています。
express.static
ミドルウェアはres.sendFile
とは別のものであるため、public
ディレクトリへの絶対パスで初期化してもres.sendFile
には何もしません。絶対パスをres.sendFile
で直接使用する必要があります。簡単な方法は2つあります。
res.sendFile(path.join(__dirname, '../public', 'index1.html'));
res.sendFile('index1.html', { root: path.join(__dirname, '../public') });
注:__dirname
は、現在実行されているスクリプトがあるディレクトリを返します。この場合、server.js
はapp/
内にあるように見えます。そのため、public
を取得するには、最初に1つのレベルを取り消す必要があります。../public/index1.html
。
注:path
は組み込みモジュール であり、そのためにはrequire
dが必要です。上記のコードが機能するように:var path = require('path');
代わりにこれを試してください。
res.sendFile('public/index1.html' , { root : __dirname});
これは私のために働きました。 root:__ dirnameは、上記の例でserver.jsがあるアドレスを取得し、次にindex1.html(この場合)に到達するために、パブリックフォルダがあるディレクトリに到達することになります。
res.sendFile( __dirname + "/public/" + "index1.html" );
__dirname
は、現在実行中のスクリプト(server.js
)が存在するディレクトリの名前を管理します。
まだリストにされていない私にとって有効な代替案は、単に別々の文字列でpath.resolve
を使うか、または完全なパスでただ1つを使うことです:
// comma separated
app.get('/', function(req, res) {
res.sendFile( path.resolve('src', 'app', 'index.html') );
});
または
// just one string with the path
app.get('/', function(req, res) {
res.sendFile( path.resolve('src/app/index.html') );
});
(ノードv6.10.0)
私はこれを試してみました、そしてそれはうまくいきました。
app.get('/', function (req, res) {
res.sendFile('public/index.html', { root: __dirname });
});
他の答えに基づいて、これは最も一般的な要件を達成する方法の簡単な例です:
const app = express()
app.use(express.static('public')) // relative path of client-side code
app.get('*', function(req, res) {
res.sendFile('index.html', { root: __dirname })
})
app.listen(process.env.PORT)
これは リクエストごとにindex.htmlで応答する の簡単な方法も兼ね備えています。これは、静的(パブリック)ディレクトリに見つからないすべてのファイルをキャッチするためにスター*
を使用しているためです。これはWebアプリの最も一般的なユースケースです。ルートパスのインデックスのみを返すには、/
に変更します。
より少ないコードを書くことによってこれをするもう一つの方法。
app.use(express.static('public'));
app.get('/', function(req, res) {
res.sendFile('index.html');
});
process.cwd()
はプロジェクトの絶対パスを返します。
その後:
res.sendFile( `${process.cwd()}/public/index1.html` );
sendFileの代わりにsendを使用して、エラーに直面しないようにすることができます!これはあなたを助けます!
fs.readFile('public/index1.html',(err,data)=>{
if(err){
consol.log(err);
}else {
res.setHeader('Content-Type', 'application/pdf');
応答がPDFのタイプであることをブラウザーに伝えるため
res.setHeader('Content-Disposition', 'attachment; filename='your_file_name_for_client.pdf');
ユーザーがそれをダウンロードした後、そのファイルを同じページですぐに開きたい場合は、上記のコードの添付ファイルの代わりに「インライン」を書き込みます。
res.send(data)
一度これを設定してどこでもそれを使用したい場合は、単にあなた自身のミドルウェアを設定してください。アプリを設定するときには、次のようにしてレスポンスオブジェクトに新しい関数を定義します。
app.use((req, res, next) => {
res.show = (name) => {
res.sendFile(`/public/${name}`, {root: __dirname});
};
next();
});
その後、次のように使用してください。
app.get('/demo', (req, res) => {
res.show("index1.html");
});
私はNode.Jsを使用して同じ問題を抱えていました…私はすべてのスクリプトの先頭に '/'を追加してcss静的ファイルにリンクするだけで解決しました。
前:
<link rel="stylesheet" href="assets/css/bootstrap/bootstrap.min.css">
後:
<link rel="stylesheet" href="/assets/css/bootstrap/bootstrap.min.css">