我对Web开发还很陌生,我正在尝试将一些JSON数据发送到运行express的node.js服务器,但出现此错误:
无法加载http://localhost:8888/:方法PUT不允许 飞行前响应中的Access-Control-Allow-Methods。
我不知道这意味着什么。这是客户端获取:
fetch('http://localhost:8888/', {
method: 'PUT',
body: JSON.stringify(this.exercises),
headers: {
'Content-Type': 'application/json'
}
}).then(res => res.json())
.catch(err => console.error('Error: ' + err))
.then(res => console.log('Success: ' + res));
这是服务器端代码:
app.put('/', (req, res, next) => {
console.log('PUT request received');
console.log(req.body);
});
服务器似乎甚至没有收到请求。我该如何工作?预先感谢。
答案 0 :(得分:1)
确保使用bodyParser(要访问数据,我们必须使用body-parser,它允许express读取body)。 npm install --save body-parser
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
设置cors
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header(
'Access-Control-Allow-Headers',
'Origin, X-Requested-With, Content-Type, Accept, Authorization'
);
if (req.method === 'OPTIONS') {
res.header('Access-Control-Allow-Methods', 'PUT, POST, PATCH, DELETE, GET');
return res.status(200).json({});
}
next();
});
确保在定义路由之前定义配置。 有关cors的信息:https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS