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

Node.js+Express开发BMI计算器时出现NaN错误的求助

解决BMI计算器返回NaN的问题

我看了你的代码,出现Your BMI is NaN是因为几个关键的小错误,咱们一个个来修复:

1. 后端缺少表单数据解析中间件

Express 默认不会自动解析 POST 请求的表单数据,所以你需要在代码开头添加中间件来处理表单提交的内容:

const express = require("express");
const app = express();

// 新增这一行,用来解析表单格式的POST数据
app.use(express.urlencoded({ extended: true }));

app.get("/", function(req, res){
    res.sendFile(__dirname + "/index.html");
});
// ... 其他代码保持不变

2. 错误的字符串包裹导致转数字失败

你在获取体重和身高时,把req.body.weight用引号包起来了——这相当于你在尝试把字符串"req.body.weight"转成数字,这肯定会得到NaN!去掉引号直接使用变量即可:

// 错误写法
// var weight = parseInt("req.body.weight");
// var height = parseInt("req.body.height");

// 正确写法
var weight = parseInt(req.body.weight);
var height = parseInt(req.body.height);

3. 前端input类型不符合规范

HTML里并没有type="weight"和type="height"这种输入类型,应该用type="number"来约束用户输入数字,避免非数字内容导致的计算异常,同时可以加上单位提示让用户更清楚输入要求:

<!-- 错误写法 -->
<!-- <input type="weight" name="weight" placeholder="Please type your weight">;
<input type="height" name="height" placeholder="Please type your height">; -->

<!-- 正确写法 -->
<input type="number" name="weight" placeholder="Please type your weight (kg)">
<input type="number" name="height" placeholder="Please type your height (m)">

另外记得去掉input标签后面多余的分号,这属于无效的HTML语法。

额外优化建议

可以添加输入验证逻辑,避免用户未输入或输入无效数值就提交的情况,同时把BMI结果保留两位小数更美观:

app.post("/", function(req, res){
    var weight = parseInt(req.body.weight);
    var height = parseInt(req.body.height);
    
    // 验证输入是否有效
    if (isNaN(weight) || isNaN(height) || height <= 0 || weight <= 0) {
        res.send("Please enter valid weight and height!");
        return;
    }
    
    var bmi = weight / (height * height);
    res.send(`Your BMI is ${bmi.toFixed(2)}`);
});

把这些修改完成后,你的BMI计算器就能正常运行啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 10:18:13