1. ホーム
  2. node.js

[解決済み] Express res.sendfile で forbidden エラーが発生する。

2022-04-20 02:25:07

質問

このようなコードがあります。

res.sendfile( '../../temp/index.html' )

しかし、このようなエラーを投げてしまいます。

Error: Forbidden
at SendStream.error (/Users/Oliver/Development/Personal/Reader/node_modules/express/node_modules/send/lib/send.js:145:16)
at SendStream.pipe (/Users/Oliver/Development/Personal/Reader/node_modules/express/node_modules/send/lib/send.js:307:39)
at ServerResponse.res.sendfile (/Users/Oliver/Development/Personal/Reader/node_modules/express/lib/response.js:339:8)
at exports.boot (/Users/Oliver/Development/Personal/Reader/server/config/routes.js:18:9)
at callbacks (/Users/Oliver/Development/Personal/Reader/node_modules/express/lib/router/index.js:161:37)
at param (/Users/Oliver/Development/Personal/Reader/node_modules/express/lib/router/index.js:135:11)
at pass (/Users/Oliver/Development/Personal/Reader/node_modules/express/lib/router/index.js:142:5)
at Router._dispatch (/Users/Oliver/Development/Personal/Reader/node_modules/express/lib/router/index.js:170:5)
at Object.router (/Users/Oliver/Development/Personal/Reader/node_modules/express/lib/router/index.js:33:10)
at next (/Users/Oliver/Development/Personal/Reader/node_modules/express/node_modules/connect/lib/proto.js:199:15)

なぜそうなるのか、どなたか教えてください。

解決方法は?

相対パスが原因だと思います。"../"は悪意があるとみなされます。まずローカルパスを解決し、次に res.sendfile . でパスを解決することができます。 path.resolve をあらかじめ設定しておきます。

var path = require('path');
res.sendFile(path.resolve('temp/index.html'));