Node.js Express函数使用入门求助:变量相加返回响应问题
问题排查与修复方案
你的代码存在几个关键问题,导致无法正确返回相加结果,下面逐一说明并给出修复后的代码:
问题点分析
- 路由回调写法错误:
app.get('/',(sampler),(req,res)=>{})这种写法把sampler当成了Express中间件,但它不符合中间件的格式要求(中间件需要接收req、res、next三个参数),而且你并没有调用它来获取计算结果。 - 变量作用域问题:
s是sampler函数内部的局部变量,外部的路由回调根本访问不到这个变量。 - res.send的类型问题:直接传递数字给
res.send时,Express会把它识别成HTTP状态码,而非响应内容,需要转换成字符串或对象再返回。 - bodyParser的冗余使用:Express 4.16.0及以上版本已经内置了JSON解析功能,不需要单独引入
bodyParser,用express.json()即可。
修复后的代码
const express = require('express'); const app = express(); // 替换bodyParser.json()为内置的express.json() app.use(express.json()); function sampler(){ const a = 1; const b = 2; return a + b; } app.get('/', (req, res) => { // 调用sampler函数获取相加结果 const result = sampler(); // 将结果转为字符串返回,避免被当成状态码 res.send(`相加结果:${result}`); // 也可以用JSON格式返回:res.json({ result: result }) }) app.listen(2300, () => { console.log('服务器运行在http://localhost:2300'); });
额外拓展(可选)
如果需要让用户自定义传入a和b的值,而非固定写死,可以通过URL查询参数实现:
app.get('/', (req, res) => { // 从查询参数中获取a和b,默认值设为0避免NaN const a = parseInt(req.query.a) || 0; const b = parseInt(req.query.b) || 0; const result = a + b; res.send(`相加结果:${result}`); })
此时访问http://localhost:2300?a=3&b=5就能得到8的计算结果。
内容的提问来源于stack exchange,提问作者xcrystal360
相关产品推荐
相关产品推荐

