与node.js和socket.io聊天应用程序

时间:2013-12-08 18:53:12

标签: node.js socket.io

我正在尝试使用node.js和socket.io

创建聊天应用

这是我的地址脚本app.js

var express = require('express'),
    app = express(),
    server = require('http').createServer(app),
    io = require('socket.io').listen(server);

server.listen(3000);

app.get('/', function(req, res){
    res.sendfile(__dirname + '/game.php');
});

io.sockets.on('connection', function(socket){
    socket.on('send message', function(data){
        io.sockets.emit('new message', data);
    });
});

使用.html一切正常

但是,当我将其更改为.php而不是加载页面时,它开始下载

on“localhost:3000”

我应该改变什么来使其有效?

如果您需要game.php代码,请让我发布。

更新 编辑了这部分

app.get('/', function(req, res) {
  res.setHeader('Content-Type', 'text/html');
  res.sendfile(__dirname + '/game.php');
});

现在它给了我

ReferenceError: text is not defined
    at C:\Users\Mojtaba\Desktop\chat\app.js:9:33
    at callbacks (C:\Users\Mojtaba\Desktop\chat\node_modules\express\lib\router\index.js:161:37)
    at param (C:\Users\Mojtaba\Desktop\chat\node_modules\express\lib\router\index.js:135:11)
    at pass (C:\Users\Mojtaba\Desktop\chat\node_modules\express\lib\router\index.js:142:5)
    at Router._dispatch (C:\Users\Mojtaba\Desktop\chat\node_modules\express\lib\router\index.js:170:5)
    at Object.router (C:\Users\Mojtaba\Desktop\chat\node_modules\express\lib\router\index.js:33:10)
    at next (C:\Users\Mojtaba\Desktop\chat\node_modules\express\node_modules\connect\lib\proto.js:190:15)
    at Object.expressInit [as handle] (C:\Users\Mojtaba\Desktop\chat\node_modules\express\lib\middleware.js:31:5)
    at next (C:\Users\Mojtaba\Desktop\chat\node_modules\express\node_modules\connect\lib\proto.js:190:15)
    at Object.query [as handle] (C:\Users\Mojtaba\Desktop\chat\node_modules\express\node_modules\connect\lib\middleware\query.js:44:5

1 个答案:

答案 0 :(得分:0)

确定浏览器是将文件显示为已下载的附件还是应该直接打开文件的内容是Content-Disposition HTTP标头。

尝试在发送文件之前添加:

res.setHeader('Content-Disposition','inline');

现在浏览器不再将该文件视为附件。可能发生的事情是express正在查看文件的扩展名,因为它无法识别PHP扩展,因此它将文件作为附件发回。

但是打开的文件不应该在浏览器中显示,因为浏览器无法解释PHP。 PHP文件应在后端进行解释,而不是发送到浏览器。

您可以使用PHP作为快速使用的视图引擎,例如php-node,买我认为这不是一个非常频繁的组合。

快递的默认视图引擎为jademustache也经常被提及以及handlebars

如果您更喜欢客户端而不是服务器端的模板引擎,请检查angular.js

在继续之前,了解将PHP文件发送到浏览器不是解决问题的解决方案非常重要,请先阅读一些article或两个关于服务器端和客户端模板之间差异的内容。 / p>