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

如何解决TypeError: Cannot read properties of undefined (reading 'fName')错误

解决TypeError: Cannot read properties of undefined (reading 'fName')错误

下面是导致错误的核心问题及修正方案:

  • 路由回调参数顺序颠倒:app.post("/")的回调函数参数顺序写反了,Express路由回调的标准顺序是(req, res),你写成了(res, req),导致req被赋值为响应对象,实际请求对象变成了res,自然读取不到req.body.fName。
    修正代码:

    app.post("/", function(req, res){
        const fName = req.body.fName;
        const lName = req.body.lName;
        const email = req.body.email;
        // 后续逻辑
    });
    
  • 变量名不匹配:你定义的变量是fName和lName,但在merge_fields里误用了未定义的firstName和lastName,这会引发新的ReferenceError,需修正为对应变量:

    merge_fields:{
        FNAME: fName,
        LNAME: lName
    }
    
  • 拼写错误:merge_feilds拼写错误,正确拼写是merge_fields(注意是fields而非feilds)。

  • JSON序列化方法错误:JSONstringify(data)缺少点号,正确写法是JSON.stringify(data)。

  • 变量重名冲突:你已引入request模块,又在回调中声明同名变量const request = https.request(...),会覆盖模块引用,建议修改为其他名称,比如mailchimpRequest:

    const mailchimpRequest = https.request(url, options, function(response){
        response.on("data", function(data){
            console.log(JSON.parse(data))
        })
    })
    mailchimpRequest.write(Jsondata);
    mailchimpRequest.end();
    

修正后的完整代码

const express = require("express");
const bodyParser = require("body-parser");
const request = require("request");
const https = require("https");

const app = express();

app.use(express.static("public"));
app.use(bodyParser.urlencoded({extended: true}));

app.get("/", function(req, res){
    res.sendFile(__dirname + "/signup.html")
});

app.post("/", function(req, res){
    const fName = req.body.fName;
    const lName = req.body.lName;
    const email = req.body.email;

    const data = {
        members : [
            {
                email_address: email,
                status: "subscribed",
                merge_fields:{
                    FNAME: fName,
                    LNAME: lName
                }
            }
        ]
    };

    const Jsondata = JSON.stringify(data);

    const url = "https://us21.api.mailchimp.com/3.0/lists/eca64732d1";

    const options= {
        method: "POST",
        auth:"string1:60ca81db08a41da8672a40261c9d7afd-us21"
    };

    const mailchimpRequest = https.request(url, options, function(response){
        response.on("data", function(data){
            console.log(JSON.parse(data))
        })
    })
    mailchimpRequest.write(Jsondata);
    mailchimpRequest.end();
});

app.listen(3000, function(){
    console.log("server is running on port 3000");
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:25:24