在nodejs中开发一个API,该API负责将json发送到Web客户端。从javascript,我正在执行以下POST
fetch('http://webapp.panpemws65.us-east-1.elasticbeanstalk.com/DatosPrueba', {
method: 'POST',
headers: {
Accept: 'application/json',
},
body: JSON.stringify({
Codigo: '06056520I000',
})
},
).then(response => {
if (response.ok) {
response.json().then(json => {
console.log(json);
});
}
});
}
这是负责接收请求的代码。 这是应该接收代码的API
router.post('/DatosPrueba', (req, res) =>{
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); // If needed
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type'); // If needed
res.setHeader('Access-Control-Allow-Credentials', true); // If needed
//Recibiendo codigo por parametro
const Codigo = req.body.Codigo;
mysqlConnection.query("SELECT * FROM [dbo].[WMS_Movimientos] where Codigo = '" + Codigo + "'", (err,rows) =>{
if(!err) {
res.json(rows);
console.log(rows)
}else{
console.log(err);
}
});
})
当尝试检索从第一个代码发送的值时 const Codigo = req.body.Codigo; 该数据正在未定义
中答案 0 :(得分:1)
一切正常,但是您错过了标题'content-type'
fetch('https://webapp.panpemws65.us-east-1.elasticbeanstalk.com/DatosPrueba',
{
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
Codigo: '06056520I000',
})
}
).then(response => {
if (response.ok) {
response.json().then(json => {
console.log(json);
});
}
}).catch(err=>{
// handle error here
})
还要确保您正在使用json主体解析器。
并且在发生错误的情况下也在后端发送错误响应,否则一段时间后请求运行超时而没有响应。
router.post('/DatosPrueba', (req, res) =>{
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); // If needed
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type'); // If needed
res.setHeader('Access-Control-Allow-Credentials', true); // If needed
//Recibiendo codigo por parametro
const Codigo = req.body.Codigo;
mysqlConnection.query("SELECT * FROM [dbo].[WMS_Movimientos] where Codigo = '" + Codigo + "'", (err,rows) =>{
if(!err) {
res.json(rows);
console.log(rows)
}else{
console.log(err);
// send error response else client run timeout
res.status(500).json({"message":"error message"})
}
});
})
答案 1 :(得分:0)
如果您没有其他说明,我将更新我的答案,但是此刻您发布的内容给我的印象是您使用的是原始的nodejs(即,没有框架或中间件软件包可以缓解这种情况)。
节点request
对象是ReadableStream,您需要通过Stream接口访问它。来自节点文档的示例:
let body = [];
request.on('data', (chunk) => {
body.push(chunk);
}).on('end', () => {
body = Buffer.concat(body).toString();
// at this point, `body` has the entire request body stored in it as a string
});
如果您不想自己处理这些细粒度的细节,可以使用许多软件包为您提供更友好的界面。