[add] Entonces mi próximo problema es que cuando intento agregar una nueva dependencia (npm install --save socket.io). El archivo JSON también es válido. Me sale este error: no se pudo analizar 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
Así que he estado tratando de descubrir por qué este error ha regresado. Todos los archivos (HTML, JSON, JS) están dentro de la misma carpeta en mi escritorio. Estoy usando node.js y socket.io
Este es mi archivo 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');
});
Esto es lo que se devuelve:
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)
fuente
path.resolve(__dirname, '.../public')
? Eso se resolverá en el subdirectorio 'público' del directorio principal del script.../../<etc>
sintaxis de tipo. Observe la coma entre__dirname
y../public
. Usar un signo + no funciona.Intenta agregar la ruta raíz.
fuente
en archivos .mjs, por ahora no tenemos __dirname
por lo tanto
fuente
Si confía en la ruta, path.resolve es una opción:
fuente
El error es bastante sencillo. Lo más probable es que la razón sea que su archivo index.html no está en el directorio raíz.
O si está en el directorio raíz, entonces la referencia relativa no funciona.
Por lo tanto, debe indicarle al servidor la ubicación exacta de su archivo. Esto podría hacerse utilizando el método de nombre de directorio en NodeJs. Simplemente reemplace su código con este:
Asegúrese de agregar el símbolo de barra diagonal "/" antes de su página de inicio. De lo contrario, su ruta será: rootDirectoryindex.html
Mientras que desea que sea: rootDirectory / index.html
fuente
Resuelvo esto usando la variable de ruta. El código de muestra se verá a continuación.
fuente
Si está trabajando en el directorio raíz, puede usar este enfoque
pero si está utilizando Rutas que están dentro de una carpeta, digamos
/Routes/someRoute.js
que deberá hacer algo como estofuente
En mecanografiado con ruta relativa al icono:
fuente
Redirigirá a index.html en localhost: llamada 8080.
fuente
Utilicé el siguiente código e intenté mostrar el archivo sitemap.xml
fuente
Esto se puede resolver de otra manera:
process.env.PWD
antepondrá el directorio de trabajo cuando se inició el proceso.fuente
Hice esto y ahora mi aplicación funciona correctamente,
fuente
Puede considerar usar barras dobles en su directorio, por ejemplo
fuente