Skip to content

Instantly share code, notes, and snippets.

@YaroslavLyzlov
Created December 2, 2012 18:15
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save YaroslavLyzlov/4190256 to your computer and use it in GitHub Desktop.
Save YaroslavLyzlov/4190256 to your computer and use it in GitHub Desktop.
dixonich@gmail.com [NODEJS] -- Собственно, мне как-то надо получить данные с клиента (я получаю дефолтным аяксом, методом GET) но, не могу их получить на сервере. Я вроде бы и понимаю, что получение данных с сервера должно быть в одной области видимости с
/* суть в том, что если
var url_string = request.url;
var params = url.parse(url_string, true).query;
console.log(params["name"]);
в одной области видимости с response.end() (то есть, в collection.find(), то всё работает, но я не знаю, как мне совместить добавление в БД и извлечение из неё, чтобы всё было хорошо и никто никому не мешал)
*/
var http = require("http");
var url = require("url");
var Db = require ("mongodb").Db;
var Server = require("mongodb").Server;
function start () {
'use strict';
function onRequest (request, response) {
'use strict';
var db = new Db ("TestApp", new Server ("127.0.0.1", 27017, {}));
response.writeHead(200, {"Content-Type": "application/json", "Access-Control-Allow-Origin": "*"});
var url_string = request.url;
var params = url.parse(url_string, true).query;
console.log(params["name"]);
db.open (function (err, db) {
db.collection ('ObjectCollection', function (err, collection) {
collection.find().toArray (function (err, docs) {
console.log (docs);
response.write(JSON.stringify(docs));
response.end();
});
});
});
}
http.createServer(onRequest).listen(8080);
console.log ('Server has started...')
}
exports.start = start;
///////////
$(document).ready (function () {
function getXmlHttp() {
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
function ConstructCollection (name, quantity, price, sum) {
'use strict';
this.name = name;
this.quantity = quantity;
this.price = price;
this.sum = sum;
}
function Validate (price, quantity) {
'use strict';
var alerts = [];
if (isNaN(quantity)) {
alerts.push ("* Bad data (Quantity)")
}
if (isNaN(price)) {
alerts.push ("* Bad data (Price)")
}
return alerts;
}
$(".btn").on ("click", function () {
'use strict';
var name = $("#id-name").val(), price = $("#id-price").val(), quantity = $("#id-quantity").val();
price = price.replace(/\s/g, '');
quantity = quantity.replace(/\s/g, '');
name = name.replace(/\s/g, '');
price = parseFloat(price);
quantity = parseFloat(quantity);
var alerts = Validate(price, quantity);
if (alerts.length <= 0) {
alert(1)
$(".badge").remove();
$(".del").remove();
$(".span4").prepend ("<span class='badge badge-success'>Succes! The data are valid!</span><br class = 'del'>");
var sum = price*quantity;
var collection = new ConstructCollection(name, quantity, price, sum);
Send (collection);
console.log (collection);
} else {
$(".badge").remove();
$(".del").remove();
for (var i = 0; i < alerts.length; i++) {
$(".span4").prepend ("<span class='badge badge-important'>" + alerts[i] + "</span><br class = 'del'>");
}
}
});
function Send(collection) {
var req = getXmlHttp();
req.onreadystatechange = function () {
if (req.readyState == 4) {
if (req.status == 200) {
alert(1);
}
}
}
var params = 'name=' + encodeURIComponent(collection.name) + '&quantity=' + encodeURIComponent(collection.quantity) + '&price=' + encodeURIComponent(collection.price) + '&sum=' + encodeURIComponent(collection.sum);
req.open('GET', 'http://localhost:8080?'+ params, true);
req.send(null);
}
});
@azproduction
Copy link

        var url_string = request.url;
        var params = url.parse(url_string, true).query;
        console.log(params["name"]);

тут все чисто - скорее всего что-то на клиенте напутано

@YaroslavLyzlov
Copy link
Author

/* суть в том, что если
var url_string = request.url;
var params = url.parse(url_string, true).query;
console.log(params["name"]);
в одной области видимости с response.end() (то есть, в collection.find(), то всё работает, но я не знаю, как мне совместить добавление в БД и извлечение из неё, чтобы всё было хорошо и никто никому не мешал)
*/

@YaroslavLyzlov
Copy link
Author

То есть, если я добавляю данный код в область видимости с response.end(), то в консоль я получаю name

@azproduction
Copy link

То есть, если я добавляю данный код в область видимости с response.end(), то в консоль я получаю name

Это очень странно. А просто console.log(request.url) что сожержит.

@YaroslavLyzlov
Copy link
Author

Содержит "/"
И ещё откуда-то единица выводится в консоль

@YaroslavLyzlov
Copy link
Author

Ой, единицу это я вывожу)

@YaroslavLyzlov
Copy link
Author

/?name=13123&quantity=3123123&price=321312&sum=1003496897376
вот, что выводит, если добавить этот код в

db.open (function (err, db) {
db.collection ('ObjectCollection', function (err, collection) {
collection.find().toArray (function (err, docs) {
console.log (docs);
response.write(JSON.stringify(docs));
var url_string = request.url;
console.log("FFF" + request.url)
var params = url.parse(url_string, true).query;
console.log(params["name"]);
response.end();
});
});
});
}

@YaroslavLyzlov
Copy link
Author

Добавил код клиенского скрипта, который отправляет данные, но, сомневаюсь, что траблы в нём.

@azproduction
Copy link

var http = require("http"); 
var url = require("url");

function onRequest (request, response) {
    'use strict';
    response.writeHead(200, {"Content-Type": "application/json", "Access-Control-Allow-Origin": "*"});
    var url_string = request.url;
    var params = url.parse(url_string, true).query;
    console.log(params["name"]);
    response.end();
}
http.createServer(onRequest).listen(8080);
console.log ('Server has started...')

Вот эта часть нормально работает.

http://localhost:8080/?name=pewpew

node test.js
Server has started...
pewpew

Дело точно не в этой части сервера

@YaroslavLyzlov
Copy link
Author

да, у меня тоже, в чём вообще может быть проблема? я не понимаю и не знаю, что делать :(

@azproduction
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment