[追加]だから私の次の問題は、私が新しい依存関係を追加しようとしたときです(npm install --save socket.io)。 JSONファイルも有効です。私はこのエラーが表示されます。JSONを解析できませんでした
npm ERR! Unexpected string
npm ERR! File: /Users/John/package.json
npm ERR! Failed to parse package.json data.
npm ERR! package.json must be actual JSON, not just JavaScript.
npm ERR!
npm ERR! This is not a bug in npm.
npm ERR! Tell the package author to fix their package.json file. JSON.parse
だから私はこのエラーが戻ってきた理由を把握しようとしていました。すべてのファイル(HTML、JSON、JS)は私のデスクトップの同じフォルダの中にあります。私はnode.jsとsocket.ioを使っています
これは私のJSファイルです:
var app = require('express')();
var http = require('http').Server(app);
app.get('/', function(req, res){
res.sendFile('index.html');
});
http.listen(3000,function(){
console.log('listening on : 3000');
});
これが返されているものです:
MacBook-Pro:~ John$ node /Users/John/Desktop/Chatapp/index.js
listening on : 3000
TypeError: path must be absolute or specify root to res.sendFile
at ServerResponse.sendFile (/Users/John/node_modules/express/lib/response.js:389:11)
at /Users/John/Desktop/Chatapp/index.js:5:7
at Layer.handle [as handle_request] (/Users/John/node_modules/express/lib/router/layer.js:76:5)
at next (/Users/John/node_modules/express/lib/router/route.js:100:13)
at Route.dispatch (/Users/John/node_modules/express/lib/router/route.js:81:3)
at Layer.handle [as handle_request] (/Users/John/node_modules/express/lib/router/layer.js:76:5)
at /Users/John/node_modules/express/lib/router/index.js:234:24
at Function.proto.process_params (/Users/John/node_modules/express/lib/router/index.js:312:12)
at /Users/John/node_modules/express/lib/router/index.js:228:12
at Function.match_layer (/Users/John/node_modules/express/lib/router/index.js:295:3)
TypeError: path must be absolute or specify root to res.sendFile
at ServerResponse.sendFile (/Users/John/node_modules/express/lib/response.js:389:11)
at /Users/John/Desktop/Chatapp/index.js:5:7
at Layer.handle [as handle_request] (/Users/John/node_modules/express/lib/router/layer.js:76:5)
at next (/Users/John/node_modules/express/lib/router/route.js:100:13)
at Route.dispatch (/Users/John/node_modules/express/lib/router/route.js:81:3)
at Layer.handle [as handle_request] (/Users/John/node_modules/express/lib/router/layer.js:76:5)
at /Users/John/node_modules/express/lib/router/index.js:234:24
at Function.proto.process_params (/Users/John/node_modules/express/lib/router/index.js:312:12)
at /Users/John/node_modules/express/lib/router/index.js:228:12
at Function.match_layer (/Users/John/node_modules/express/lib/router/index.js:295:3)
エラーは非常に明白です、あなたは絶対パスを指定するか相対パスではなくres.sendFile()
の設定オブジェクトにroot
をセットする必要があります。例:
// assuming index.html is in the same directory as this script
res.sendFile(__dirname + '/index.html');
またはルート(res.sendFile()
の最初の引数のベースパスとして使用される)を指定します。
res.sendFile('index.html', { root: __dirname });
root
パスを指定すると、..
のような不正な形式または悪意のある部分を含む可能性があるユーザー生成のファイルパスを渡す場合に便利です(例:../../../../../../etc/passwd
)。 root
パスを設定すると、そのような悪質なパスがそのベースパスの外側のファイルにアクセスするために使用されるのを防ぎます。
ルートパスを追加してみてください。
app.get('/', function(req, res) {
res.sendFile('index.html', { root: __dirname });
});
今のところ.mjsファイルには__dirnameがありません
それゆえ
res.sendFile('index.html', { root: '.' })
パスを信頼している場合は、path.resolveがオプションです。
var path = require('path');
// All other routes should redirect to the index.html
app.route('/*')
.get(function(req, res) {
res.sendFile(path.resolve(app.get('appPath') + '/index.html'));
});
エラーはかなり簡単です。最も可能性が高いのは、index.htmlファイルがルートディレクトリにないことです。
または、それがルートディレクトリにある場合は、相対参照は機能していません。
それであなたはあなたのファイルの正確な位置をサーバーに伝える必要があります。これは、NodeJでdirnameメソッドを使用して実行できます。コードをこれに置き換えてください。
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
あなたがあなたのホームページの前にスラッシュ "/"記号を追加することを確認してください。それ以外の場合、パスは次のようになります。rootDirectoryindex.html
RootDirectory/index.htmlにします。
あなたがルートディレクトリで作業しているなら、あなたはこのアプローチを使うことができます
res.sendFile(__dirname + '/FOLDER_IN_ROOT_DIRECTORY/index.html');
しかし、フォルダの中にあるRoutesを使っているなら/Routes/someRoute.js
と言うことができます、そしてあなたはこのような何かをする必要があるでしょう
const path = require("path");
...
route.get("/some_route", (req, res) => {
res.sendFile(path.resolve('FOLDER_IN_ROOT_DIRECTORY/index.html')
});
ディレクトリに二重スラッシュを使用することを検討するかもしれません。
app.get('/',(req,res)=>{
res.sendFile('C:\\Users\\DOREEN\\Desktop\\Fitness Finder' + '/index.html')
})
アイコンへの相対パスを持つTypeScriptの場合:
import path from 'path';
route.get('/favicon.ico', (_req, res) => res.sendFile(path.join(__dirname, '../static/myicon.png')));
それはlocalhost:8080呼び出しでindex.htmlにリダイレクトします。
app.get('/',function(req,res){
res.sendFile('index.html', { root: __dirname });
});
パス変数を使用してこれを解決します。サンプルコードは以下のようになります。
var path = require("path");
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname + '/index.html'));
})