我正在尝试在Express API上发布AJAX。
我期望{user:Todd}返回我的数据对象,但是,每当我尝试记录请求正文时,该对象就会显示为空。/
function addDays(date, days) {
let fomarttedDate = date.split("/")
var result = new Date(fomarttedDate[2], fomarttedDate[1] -1, fomarttedDate[0]);
result.setDate(result.getDate() + days);
result=result.toLocaleDateString();
result = result.split(' ')[0];
return result;
}
console.log(addDays("23/05/2019", 2))
我也总是使用cURL测试端点,并且我记得我需要传递标头“ Content-Type:application / json”以便过去能够正常工作。
$.ajax({
url: '/api/test',
type: 'POST',
data: ({user: "Todd"})
})
我正在监听NodeJS服务器上的请求,并且上面的请求甚至都没有碰到我的服务器,而第一个发送空JSON。
我正式感到困惑!如何添加标头会破坏我的API这样?
这是我的API的简单源代码。
$.ajax({
url: '/api/test',
type: 'POST',
data: ({user: "Todd"}),
contentType: 'application/json'
})
答案 0 :(得分:0)
在您的html脚本标记中尝试
const apiHost = "http://localhost:3000";
$.ajax({
url: `${apiHost}/api/test`, //add full path of your host
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({ //JSON data needs to be stringified before its sent through http.
'user': 'hello'
})
})
您的服务器未收到请求的原因是由于 CORS 被阻止/受限制。
跨源资源共享是一种机制,它允许从提供第一资源的域之外的另一个域请求网页上的受限资源。网页可以自由地嵌入跨域图像,样式表,脚本,iframe和视频。 -维基百科
npm install --save cors
并使用下面的代码
var express = require('express');
var bodyParser = require('body-parser')
var cors = require('cors');
let app = express();
let port = 3000
app.use(cors()); // add cors to middleware
app.use(bodyParser.json());
// for parsing application/json which was stringified in the ajax front-end
app.use(bodyParser.urlencoded({ extended: true }));
app.get('/api/test', function (req, res) {
res.send("<h1>WOrking</h1>")
})
app.post('/api/test', function (req, res) {
console.log(req.body)
});
app.listen(port, () => console.log(`App listening on port ${port}`));
答案 1 :(得分:-1)
我昨天设法解决了这个问题。我感谢所有的帮助。
事实证明,我需要在我的快速正文解析器中添加以下代码:
app.use(bodyParser.urlencoded({ extended: true }));