【发布时间】:2019-01-28 18:45:01
【问题描述】:
我使用 ReactJS 作为前端,使用 Nodejs (Express) 作为 API。我似乎无法获取 Nodejs 中的反应服务发送的请求的 JSON 值。我可以调用 POST 路由,甚至可以收到回复,但 req.body 似乎是空的。这是我在 React 中使用的 Fetch 函数:
static Post(url, bodyArgs){
return new Promise((resolve, reject) => {
fetch(apiUrl+url, {
method: 'POST',
mode: "no-cors",
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(bodyArgs),
//{eventID: 1}
})
.then((res) => res.json())
.then((resJson) => {
//console.log(resJson);
return resJson;
})
.catch((err) => {
//console.error(err);
return err;
});
});
}
这是我在路线上使用的代码 (accounts.js):
router.post('/login', function(req, res){
res.json({requestBody: req.body})
var username = req.body.username;
var password = req.body.password;
console.log(JSON.stringify(req.body))
console.log("got it")
console.log(username+" <> "+password);
res.json(req.body);
});
我已经在我的 app.js 主文件中添加了 JSON 中间件:
var accountsRouter = require('./routes/accounts');
var usersRouter = require('./routes/users');
var eventsRouter = require('./routes/events');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/accounts', accountsRouter);
app.use('/users', usersRouter);
app.use('/events', eventsRouter);
为什么它不起作用?是因为我还必须在路由器文件中包含 Json 中间件吗?
编辑:我正在使用 Express@4.16.3
【问题讨论】:
-
“req.body 好像是空的”你能说的更具体点吗?
-
好吧,当我尝试读取我发送的值时,里面没有值。它只是一个空数组,这意味着 JSON 实际上并没有被解析。
-
所以
JSON.stringify(req.body)返回一个包含[]的字符串? -
console.log(JSON.stringify(req.body))返回{}