首页 > 解决方案 > Node js程序给了我“TypeError:无法读取未定义的属性'split'”

问题描述

我的 Node js 给了我上面的 TypeError。我正在尝试调用一个名为 mathsServer 的服务器,它将接收一个在 Postan 中发布的 json 字符串,例如

{ "tal": "10,343,24,345,22,23,233, 45, 200,500" }

它应该添加“tal”中的所有值并在浏览器上显示。这是我的代码:

应用程序.js

const path = require("path");
const express = require("express");
const app = express();
const router = require("./router");

const host = "127.0.0.1"
const port = 3000

app.use(express.urlencoded({extended: false}));
app.use(express.json());
app.use(express.static("public"));
app.set("views" , "views");
app.set("view engine", "hbs");

app.use("/", router);


app.listen(port, host, () => {
    console.log(`The server is running at: http://${host}:${port}`);
});

路由器.js

const express = require("express");
const router = express.Router();
const controller = require("./controllers/controller");

router.get("/", controller.renderHomePage)

router.post("/add", controller.renderSum)

router.get("/add",controller.renderSum)


module.exports = router

控制器.js

  const mathServerModel = require("../../../mathServer/model/mathModel");
    const express = require("express");
const app = express();
const bodyParser = require('body-parser'); 
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(express.json());
    
    exports.renderSum = (req, res) => {  
           
        mathServerModel.addera(req.body.tal)
            .then(function (data) {
                console.log(data);
                res.send({data});
                res.render("post-tal", {
                    Sum: {data}        // A property called Sum to be displayed on the browser
                })
    
            })
            .catch(error => console.log(error))
        
    }

数学模型.js

const bodyParser = require('body-parser'); 

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
    
exports.addera = async (tal) => {
    let strNumbersArr = tal.split(","); // ["10", "343", "24", ..., "233"]
    let sum = 0;
    for(let i = 0; i < strNumbersArr.length; i++) {
        let currentNumberStr = strNumbersArr[i];
        sum += Number(currentNumberStr); // convert current number string into a number
    }
    return sum;
    
}

标签: node.jsjsonexpress

解决方案


在阅读任何内容之前,您必须调用这些中间件req

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

只需在执行之前在您的入口点文件中调用这两个中间件renderSum
,这将解决问题


推荐阅读