#javascript #html #node.js
#javascript #HTML #node.js
Вопрос:
В принципе, я хочу создать сервер, а затем простой javascript-сайт с phaser, чтобы попробовать кое-что, но показывает html-материал, но не javascript.
Вот мои разные файлы и коды:
index.html:
<!doctype html>
<html>
<center>
<body>
test
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script src="phaser.min.js"></script>
<script src="game.js"></script>
<div id='game'></div>
</body>
</center>
</html>
game.js:
var game = new Phaser.Game(800, 600, Phaser.CANVAS, 'game', { preload: preload, create: create, update: update });
function preload() {
game.load.image('char', 'char.png');
}
var sprite;
var cursors;
function create() {
game.physics.startSystem(Phaser.Physics.P2JS);
game.physics.p2.defaultRestitution = 0.8;
sprite = game.add.sprite(200, 200, 'char');
game.physics.p2.enable(sprite);
sprite.body.setZeroDamping();
sprite.body.fixedRotation = true;
text = game.add.text(20, 20, 'l2arrowkeys', { fill: '#ffffff' });
cursors = game.input.keyboard.createCursorKeys();
}
function update() {
sprite.body.setZeroVelocity();
if (cursors.left.isDown)
{
sprite.body.moveLeft(200);
}
else if (cursors.right.isDown)
{
sprite.body.moveRight(200);
}
if (cursors.up.isDown)
{
sprite.body.moveUp(200);
}
else if (cursors.down.isDown)
{
sprite.body.moveDown(200);
}
}
server.js:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function(req, res){
res.sendfile('index.html');
});
io.on('connection', function(socket){
console.log('a user connected');
socket.on('disconnect', function(){
console.log('a user disconnected');
});
});
http.listen(1337, function(){
console.log('listening on *:1337');
});
В основном game.js появляется, если я только открою index.html в браузере, но не в том случае, если я делаю ‘node server.js «а затем перейдите к localhost: 1337, тогда он будет показывать только «тест» (обычный текст), но не Javascript. Я не был уверен, что я должен был указать в качестве заголовка, извините, если это вводит в заблуждение / не имеет смысла.
Ответ №1:
Вам необходимо включить статический файл, обслуживающий промежуточное программное обеспечение, в верхнюю часть вашего стека:
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.use(express.static(__dirname '/public'));
app.get('/', function(req, res){
res.sendfile('index.html');
});
// ...
Поэтому, если вы поместите свои js-файлы в подкаталог с именем ‘public’ (относительно того, где находится скрипт), браузер должен иметь доступ к файлам javascript.
Комментарии:
1. Отредактировал express.static в app.static, но я все еще получаю эту ошибку: puu.sh/9JrFi/4767373cb3.png (не имеет метода ‘static’) И если бы я не редактировал его для этого, я попробовал express.static, и он говорит, что express не определен.
2. Да, только что попробовал, но он говорит, что не имеет метода ‘static’. Вот код: puu.sh/9Js1C/2cde44063d.png и вот в чем ошибка: puu.sh/9Js4C/307a0da53a.png
3. Теперь ошибок нет, но неограниченное время загрузки для localhost:1337 😛
4. Находятся ли ваши файлы javascript в
public
папке?5. Кто-нибудь может мне помочь с этим? c:
Ответ №2:
Вы неправильно настраиваете экспресс. Статическое промежуточное программное обеспечение обрабатывает отправку содержимого из каталога. В этом случае обслуживается «общедоступный» каталог, и будет доступен любой контент (HTML, CSS, JavaScript). Потребуется (express.static(__dirname ‘/app’)); в вашей экспресс-конфигурации
app.configure(function () {
app.use(express.logger());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.static(__dirname '/app'));
app.set('PORT', 3000);
});
Ответ №3:
У меня была та же проблема, что и из-за версии Express, я обновил ее до версии 4.x, и я начал получать другую ошибку (что было хорошо), а затем я использовал команду ниже :
app.get('/home', function (req, res) {
res.sendFile( __dirname "/public/" "index.html" );
})
и это сработало!
Комментарии:
1. что такое sendFile здесь, я получаю ошибку типа
has no method 'sendFile'
2. спасибо за ваш ответ, теперь он работает нормально, я не обновлял свою версию
Ответ №4:
У меня была такая же проблема с sendfile, возвращающим HTML, но не < script src>
res.sendFile(path.join(__dirname '/myFile/index.html'))
Что было исправлено путем добавления статической папки, содержащей скрипт
app.use(express.static(path.join(__dirname, 'myFile')));