[add] Jadi masalah saya berikutnya adalah ketika saya mencoba menambahkan ketergantungan baru (npm install --save socket.io). File JSON juga valid. Saya mendapatkan kesalahan ini: Gagal mengurai 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
Jadi saya sudah mencoba mencari tahu mengapa kesalahan ini telah kembali. Semua file (HTML, JSON, JS) ada di dalam folder yang sama di desktop saya. Saya menggunakan node.js dan socket.io
Ini adalah file JS saya:
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');
});
Inilah yang dikembalikan:
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)
sumber
path.resolve(__dirname, '.../public')
? Itu akan menyelesaikan ke subdirektori 'publik' dari direktori induk skrip.../../<etc>
sintaks tipe. Perhatikan koma antara__dirname
dan../public
. Menggunakan tanda + tidak berfungsi.Coba tambahkan path root.
sumber
dalam file .mjs untuk saat ini kami tidak memiliki __dirname
karenanya
sumber
Jika Anda mempercayai path, path.resolve adalah opsi:
sumber
Kesalahannya cukup mudah. Kemungkinan besar alasannya adalah bahwa file index.html Anda tidak ada di direktori root.
Atau jika ada di direktori root maka referensi relatif tidak berfungsi.
Jadi, Anda perlu memberi tahu lokasi persis lokasi file Anda. Ini bisa dilakukan dengan menggunakan metode dirname di NodeJs. Cukup ganti kode Anda dengan yang ini:
Pastikan bahwa Anda menambahkan simbol garis miring "/" sebelum beranda Anda. Jika tidak, jalur Anda akan menjadi: rootDirectoryindex.html
Sedangkan yang Anda inginkan adalah: rootDirectory / index.html
sumber
Saya mengatasi ini dengan menggunakan variabel path. Kode sampel akan terlihat seperti di bawah ini.
sumber
Jika Anda bekerja pada direktori root, maka Anda dapat menggunakan pendekatan ini
tetapi jika Anda menggunakan Rute yang ada di dalam folder katakanlah
/Routes/someRoute.js
maka Anda perlu melakukan sesuatu seperti inisumber
Dalam naskah dengan jalur relatif ke ikon:
sumber
Ini akan dialihkan ke index.html di localhost: 8080 panggilan.
sumber
Saya menggunakan kode di bawah ini dan mencoba menampilkan file sitemap.xml
sumber
Ini dapat diatasi dengan cara lain:
process.env.PWD
akan menambahkan direktori kerja saat proses dimulai.sumber
Saya melakukan ini dan sekarang aplikasi saya berfungsi dengan baik,
sumber
Anda mungkin mempertimbangkan untuk menggunakan garis miring ganda pada direktori Anda, mis
sumber