首先,我的问题可能会让你与其他人联系,但我有很多解决方案,但他们没有工作。所以我发布我的问题希望你们能帮助我。!
我创建了两个文件posts.ejs和app.js(在此文件中实现的路由)。
Post.ejs
Ajax调用: -
function SaveLocalNews(postData, cb) {
var headerSetting = {
"api-key": 1,
"UDID": getUDID(),
"device-type": getDeviceType(),
"Authorization": "Authorization"
};
var requestMedia = $.ajax({
url: "/posts",
type: "POST",
data: postData,
dataType: "json",
cache: false,
processData: false,
contentType: false,
headers: headerSetting
});
requestMedia.done(function (data) {
if (data.status) {
alert_message("success");
} else {
alert_message("fail" + "success");
// TODO: Handle not uploaded media
}
return;
});
requestMedia.fail(function (jqXHR, textStatus) {
// TODO: Handle not uploaded media
alert_message("fail");
return
});
}
App.js
var express = require("express"),
app = express(),
bodyParser = require("body-parser"),
mysql = require("mysql");
var session = require('express-session');
app.set("view engine", "ejs");
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static(__dirname + '/public'));
app.post("/posts", function (req, res) {
//I am not getting body/data what I have passed in ajax request.
console.log(req.body); // Output:- {}
});
我希望你能解决我的问题。
答案 0 :(得分:0)
您似乎需要至少进行一些更改:
添加app.use( bodyParser.json());
将您的ajax更新为:
var requestMedia = $.ajax({
url: "/posts",
type: "POST",
data: JSON.stringify(postData),
dataType: "json",
cache: false,
contentType: "application/json",
headers: headerSetting
});
我会将ajax更改为data: JSON.stringify(postData),
,而不是使用processData: false,
。 我认为两者基本相同,我个人更喜欢这种方式。
数据
键入:PlainObject或String或Array
要发送到服务器的数据。 它被转换为查询字符串, 如果还不是字符串。它附加到GET请求的URL。请参阅processData选项以防止此自动处理。对象必须是键/值对。如果value是一个数组,jQuery会根据传统设置的值使用相同的键序列化多个值(如下所述)。
将您的ajax更改为contentType: 'application/json',
,因为false
将导致它不设置任何内容类型标头,并可能导致节点无法正确查看帖子正文。
contentType(默认:' application / x-www-form-urlencoded; charset = UTF-8')
类型:布尔值或字符串
将数据发送到服务器时,请使用此内容类型。默认为" application / x-www-form-urlencoded; charset = UTF-8",这对大多数情况来说都没问题。如果您明确地将内容类型传递给$ .ajax(),那么它总是被发送到服务器(即使没有数据发送)。从jQuery 1.6开始,你可以传递false来告诉jQuery不要设置任何内容类型标题。
您还希望将dataType: false,
更改为dataType: 'json',
,因为您已完成的处理程序正在查找data.status
,这意味着您实际上希望返回json(即使您的服务器端代码不是似乎还是这样做了)
dataType(默认值:Intelligent Guess(xml,json,script或html))
类型:字符串
您期望从服务器返回的数据类型。如果没有指定,jQuery将尝试根据响应的MIME类型推断它(XML MIME类型将产生XML,在1.4 JSON中将产生一个JavaScript对象,在1.4脚本中将执行脚本,其他任何东西将是以字符串形式返回。)
如果您更新为使用JSON.stringify(postData)
,请移除processData: false,
。
processData(默认值:true)
类型:布尔值
默认情况下,作为对象传入数据选项的数据(技术上,不是字符串)将被处理并转换为查询字符串,适合默认内容类型" application / x- WWW窗体-urlencoded&#34 ;.如果要发送DOMDocument或其他未处理的数据,请将此选项设置为false。