[add] Então, meu próximo problema é que, quando tento adicionar uma nova dependência (npm install --save socket.io). O arquivo JSON também é válido. Eu recebo este erro: Falha ao analisar 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
Então, eu tenho tentado descobrir por que esse erro está retornando. Todos os arquivos (HTML, JSON, JS) estão dentro da mesma pasta na minha área de trabalho. Estou usando node.js e socket.io
Este é o meu arquivo 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');
});
É isso que está sendo retornado:
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)
fonte
path.resolve(__dirname, '.../public')
? Isso resolverá o subdiretório 'public' do diretório pai do script.../../<etc>
sintaxe do tipo. Observe a vírgula entre__dirname
e../public
. Usar um sinal de + não funciona.Tente adicionar o caminho raiz.
fonte
em arquivos .mjs que, por enquanto, não temos __dirname
conseqüentemente
fonte
Se você confia no caminho, path.resolve é uma opção:
fonte
O erro é bastante direto. Provavelmente, o motivo é que o arquivo index.html não está no diretório raiz.
Ou, se estiver no diretório raiz, a referência relativa não está funcionando.
Então, você precisa informar ao servidor a localização exata do seu arquivo. Isso pode ser feito usando o método dirname nos NodeJs. Apenas substitua seu código por este:
Certifique-se de adicionar o símbolo de barra "/" antes da sua página inicial. Caso contrário, seu caminho se tornará: rootDirectoryindex.html
Considerando que você deseja que seja: rootDirectory / index.html
fonte
Eu resolvo isso usando a variável path. O código de exemplo será parecido abaixo.
fonte
Se você estiver trabalhando no diretório raiz, poderá usar esta abordagem
mas se você estiver usando rotas dentro de uma pasta, digamos
/Routes/someRoute.js
que será necessário fazer algo assimfonte
Em Texto datilografado com caminho relativo para o ícone:
fonte
Ele será redirecionado para index.html na chamada localhost: 8080.
fonte
Usei o código abaixo e tentei mostrar o arquivo sitemap.xml
fonte
Isso pode ser resolvido de outra maneira:
process.env.PWD
precederá o diretório de trabalho quando o processo foi iniciado.fonte
Eu fiz isso e agora meu aplicativo está funcionando corretamente,
fonte
Você pode considerar o uso de barras duplas no seu diretório, por exemplo
fonte