【发布时间】:2018-09-09 20:49:32
【问题描述】:
我最近开始使用 Node.js 和 jQuery,但我不知道我的项目出了什么问题。 我有一个向节点 js 服务器发送发布请求的客户端应用程序;该服务器从帖子中获取数据并执行查询;最后,它应该向客户端发送一个包含从先前查询中检索到的信息的 json。问题是节点 js 发送的响应是一个空对象( {} ),我不知道为什么。 这是我的源代码:
节点 JS:
var http = require("http");
var url = require('url');
var querystring = require('querystring');
var express = require('express');
var cookieParser = require('cookie-parser');
var mysql = require('mysql');
var con = mysql.createConnection({
host: "",
user: "",
password: "",
database : ''
});
var app = express();
app.use(express.static(__dirname + '/public'))
.use(cookieParser());
app.post('/search',function(req, res) {
if (req.method == 'POST') { //PUT Only
var body = '';
req.on('data', function (data){body += data;});
req.on('end', function () {
var post = querystring.parse(body);
console.log("Dati in ingresso > " + JSON.stringify(post));
//res.writeHead(200, {'Content-Type': 'text/plain'})
query("SELECT Nome FROM Mood WHERE Nome LIKE \'" + post.data + "%\'",res);
});
}else{
console.log("Not POST request")
res.end();
}
});
var query = function(q,res) {
var results = {};
con.query(q, function (err, result, fields) {
if (err) throw err;
results = JSON.stringify(JSON.parse(JSON.stringify(result))[0].Nome);
console.log("Risultati query: ");
console.log(results);
});
res.json(results);
res.end();
}
app.listen(8888);
客户:
$("document").ready(function () {
$('#search-box').on('input propertychange', function(e){
var input = $(this).val();
var array = ['prova1','prova2','prova3'];
var ul = $('#results-options ul');
$.ajax({
type: "POST",
url: "/search",
data: {data : input},
contentType: "application/json",
success: function(d) {
console.log(d);
console.log(JSON.stringify(d));
console.log(JSON.parse(d));
},
error: function(d) {
console.log("Error");
}
});
$('#results-options').show();
});
$("#results-options").on('click',function (e) {
$('this').show();
e.stopPropagation();
})
$(document).on('click', function(){
$('#results-options').hide();
})
});
【问题讨论】:
-
因为您在异步调用中返回/设置之前使用结果。
-
尝试将
res.json(results); res.end();放入con.query()调用的回调中。 -
另外,快速提问——
// PUT only在.post()监听器中的目的是什么?你真的不需要在那里检查请求类型。 -
非常感谢!有效。必须删除请求类型的检查
标签: javascript jquery node.js ajax express