Node.js中如何设置Content-Type请求头?Express代码问题咨询
解决Express中JSON请求头设置与响应提示的问题
嘿,我来帮你搞定这两个问题!咱们一个一个来拆解:
1. 如何设置Content-Type: application/json请求头
根据你测试请求的工具不同,设置方式也不一样,给你几个常见场景的操作方法:
用curl命令测试
直接在终端运行以下命令,-H参数用来指定请求头:
curl -X POST http://localhost:3000/ -H "Content-Type: application/json" -d '{"key": "value"}'
用Postman测试
- 打开Postman,新建一个POST请求,地址填
http://localhost:3000/ - 切换到Headers标签,在Key列输入
Content-Type,Value列输入application/json - 切换到Body标签,选择
raw格式,下拉框选JSON,输入你的JSON内容后点击发送
用前端代码(fetch/axios)测试
fetch示例:
fetch('http://localhost:3000/', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ key: 'value' }) }) .then(res => res.text()) .then(data => console.log(data));
axios示例:
axios.post('http://localhost:3000/', { key: 'value' }, { headers: { 'Content-Type': 'application/json' } }) .then(res => console.log(res.data));
2. 为什么没看到"Server requires application/json"提示?它在哪里?
你的代码逻辑是完全正确的:当请求的Content-Type不是application/json时,服务器会返回400 Bad Request状态码,同时把提示文本放在响应的body内容里。你没看到它,大概率是测试工具默认没展示响应体,或者你没留意查看位置。
举个实际例子:
- 用curl不带请求头发请求:
curl -X POST http://localhost:3000/
你会直接在终端看到返回的文本:Server requires application/json
- 用浏览器表单发POST请求(默认
Content-Type是application/x-www-form-urlencoded),打开浏览器开发者工具(F12),切换到Network标签,找到这个POST请求,查看Response面板就能看到提示文本。
另外给你补个小细节:当前端发送JSON数据时,Express默认不会解析JSON请求体,你需要在代码里加一行app.use(express.json()),不然后续想获取请求里的JSON数据会拿不到。修改后的完整代码如下:
const express = require('express'); const app = express(); // 新增这行,让Express自动解析JSON请求体 app.use(express.json()); const requireJsonContent = () => { return (req, res, next) => { if (req.headers['content-type'] !== 'application/json') { res.status(400).send('Server requires application/json') } else { next() } } } app.get('/', (req, res, next) => { res.send('Welcome Home'); }); app.post('/', requireJsonContent(), (req, res, next) => { res.send('You sent JSON'); }) app.listen(3000, () => { console.log('Server running on port 3000'); });
内容的提问来源于stack exchange,提问作者Anwesa Roy
相关产品推荐
相关产品推荐

