You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Postman添加学生对象数组时遇ERR_INVALID_ARG_TYPE错误求解决

问题解决:Node.js HTTP服务器添加学生接口错误修复

错误根源分析

先澄清下:你标记的req.on("data")并不是真正的错误源,看错误栈,问题出在res.end({success: "true"})这一行:

  • res.end()方法只接受字符串、Buffer或Uint8Array类型的参数,你直接传了一个对象,导致类型错误。
  • 另外还有一个逻辑错误:当前代码会在接收请求体的异步过程完成前,就提前发送响应,导致students.push的逻辑还没执行,响应就已经发回客户端了。

修复后的代码

function addStudent(req, res) {
    var body = "";

    req.on("data", function (chunk) {
        body += chunk;
    });

    req.on("end", function () {
        var post = url.parse("/?" + body, true);

        let name = post.query.name;
        let gender = post.query.gender;

        students.push({ name: name, gender: gender });
        
        // 把响应逻辑移到end事件里,确保数据处理完再返回
        res.writeHead(200, { "Content-Type": "application/json" });
        // 将对象转为JSON字符串
        return res.end(JSON.stringify({ success: "true" }));
    });
}

关键修改点

  • 响应时机调整:把res.writeHead和res.end移到req.on("end")回调内,确保请求体数据完全接收并处理后,再返回响应。
  • 响应内容格式修正:用JSON.stringify()把返回的对象转为JSON字符串,符合res.end()的参数要求,同时也匹配你设置的Content-Type: application/json响应头。

额外建议

如果是处理POST请求,更规范的方式是解析请求的Content-Type,比如如果是application/x-www-form-urlencoded,可以用querystring.parse(body)来解析,比用url.parse更合理:

// 记得先导入querystring模块
const querystring = require('querystring');

// 在end回调里替换成:
const postData = querystring.parse(body);
let name = postData.name;
let gender = postData.gender;

内容的提问来源于stack exchange,提问作者Yoru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 14:15:31