-
-
Save YaroslavLyzlov/4190256 to your computer and use it in GitHub Desktop.
/* суть в том, что если | |
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); | |
} | |
}); |
/* суть в том, что если
var url_string = request.url;
var params = url.parse(url_string, true).query;
console.log(params["name"]);
в одной области видимости с response.end() (то есть, в collection.find(), то всё работает, но я не знаю, как мне совместить добавление в БД и извлечение из неё, чтобы всё было хорошо и никто никому не мешал)
*/
То есть, если я добавляю данный код в область видимости с response.end(), то в консоль я получаю name
То есть, если я добавляю данный код в область видимости с response.end(), то в консоль я получаю name
Это очень странно. А просто console.log(request.url)
что сожержит.
Содержит "/"
И ещё откуда-то единица выводится в консоль
Ой, единицу это я вывожу)
/?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();
});
});
});
}
Добавил код клиенского скрипта, который отправляет данные, но, сомневаюсь, что траблы в нём.
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
Дело точно не в этой части сервера
да, у меня тоже, в чём вообще может быть проблема? я не понимаю и не знаю, что делать :(
Запускай отладчик - http://habrahabr.ru/post/114825/ or http://technosophos.com/content/nodejs-debugging-built-debugger
тут все чисто - скорее всего что-то на клиенте напутано