node.js - 我如何获得请求?

时间:2013-02-16 14:43:40

标签: ajax node.js

我最近问了很多问题;)
所以我在创建网络聊天方面取得了一些进展。

所以我得到了它的工作,
我的问题是,如何在textarea中输入内容,点击后输入消息将被登录到服务器?

我更新了代码,因此可行。

node.js文件 -

var http = require('http');
var fs = require('fs');
var path = require('path');

var messages = [];

// Simple Function to Load all of the HTML/CSS/JavaScript Files.
function LoadHTML(html, requrl, res) {
    var filePath = '.' + requrl;
    if (filePath == './') {
        filePath = './' + html;
    }

    var extname = path.extname(filePath);
    var contentType = 'text/html';
    switch (extname) {
        case '.js':
            contentType = 'text/javascript';
        break;
        case '.css':
            contentType = 'text/css';
        break;
    }

    fs.exists(filePath, function(exists) {

        if (exists) {
            fs.readFile(filePath, function(error, content) {
                if (error) {
                    res.writeHead(500);
                    res.end();
                }
                else {
                    res.writeHead(200, { 'Content-Type': contentType });
                    res.end(content, 'utf-8');
                }
            });
        }
        else {
            res.writeHead(404);
            res.end();
        }  
    });  
}

var server = http.createServer(function (req, res) {

    var url = req.url;

    LoadHTML('index.html', url, res);

    if(url.substring(0,16) == "/ser.js?message=") {
        var message = url.substring(16, url.length);
        console.log(message);
    }

}).listen(8125);

以下是HTML / CSS / JavaScript代码 - http://jsfiddle.net/Q79PK/1/

编辑:我让它工作,我更新了代码,你可以查看和学习;)
投票会很棒!

1 个答案:

答案 0 :(得分:1)

您不应该使用http.get(options, callback),因为它旨在执行没有数据的HTTP GET。 而是使用http.request(options, callback),您可以在其中向请求添加数据。请参阅:http://nodejs.org/api/http.html#http_http_request_options_callback

对于服务器端日志记录和处理请求中发布的数据,使n​​etire req对象成为loadHTML函数的参数(而不是req.url)。然后,您将能够向ServerRequest添加一个侦听器:

req.addListener("data", function(data) {
    console.log("data : "+data);
});

(并相应地var filePath = '.' + req;更新var filePath = '.' + req.url;

如果您拥有cURL命令,可以通过模拟请求来测试:

curl -d "some data" http://localhost:8125

和服务器端,您有以下日志记录:

data : some data

以下是我所做代码的完整修改:

var http = require('http');
var fs = require('fs');
var path = require('path');

var messages = [];

// Simple Function to Load all of the HTML/CSS/JavaScript Files.
function LoadHTML(html, req, res) {
    var filePath = '.' + req.url;
    if (filePath == './') {
        filePath = './' + html;
    }

    req.addListener("data", function(data) {
        console.log("data : "+data);
    });

    var extname = path.extname(filePath);
    var contentType = 'text/html';
    switch (extname) {
        case '.js':
            contentType = 'text/javascript';
        break;
        case '.css':
            contentType = 'text/css';
        break;
    }

    fs.exists(filePath, function(exists) {

        if (exists) {
            fs.readFile(filePath, function(error, content) {
                if (error) {
                    res.writeHead(500);
                    res.end();
                }
                else {
                    res.writeHead(200, { 'Content-Type': contentType });
                    res.end(content, 'utf-8');
                }
            });
        }
        else {
            res.writeHead(404);
            res.end();
        }  
    });  
}

var server = http.createServer(function (req, res) {
    LoadHTML('./index.html', req, res); // Calling the Function to load all of the files.
}).listen(8125);

HTH