从AngularJS传参至NodeJS读取常量文件的实现疑问
解决从变量读取Node.js常量对象属性的问题
首先,咱们拆解下你遇到的两个核心问题:正确接收前端传来的参数,以及通过变量名访问对象属性,一步步来解决:
1. 先修正Node.js接收参数的方式
你前端用POST请求把数据放在请求体里,但Node端用了req.params('apiConstant')——这是错误的,req.params是用来获取URL路径参数的(比如/api/:id里的id),POST请求的JSON数据应该从req.body里读取。
第一步:配置Node.js的JSON解析中间件
如果用Express框架,必须先添加这个中间件,才能解析前端传来的JSON格式请求体:
const express = require('express'); const app = express(); // 关键:添加JSON解析中间件 app.use(express.json());
第二步:前端调整请求数据格式
确保把要传递的key放在apiConstant字段里,方便Node端读取:
// 假设你要传递的key是'COMPANY_ADD',可以存到变量里 const targetKey = 'COMPANY_ADD'; $http({ method: 'POST', url: 'http://localhost:1620', headers: { 'Content-Type': 'application/json; charset=utf-8', }, data: { apiConstant: targetKey } // 直接传递apiConstant字段 }).then(function (response) { deferred.resolve(response.data); }, function (failureResponse) { deferred.reject({ error: 'Error while getting the data' }); });
第三步:Node端正确获取参数
现在可以从请求体里拿到apiConstant的值了:
// 从req.body中读取前端传来的key var apiConstant = req.body.apiConstant;
2. 通过变量访问常量对象的属性
你之前用constants.COMPANY_ADD是硬编码属性名,当属性名是变量的时候,必须用方括号语法来访问对象属性,这是JavaScript的基础语法规则。
修改后的读取常量代码如下:
var constants = require('path to constant file'); // 用方括号包裹变量,以变量值作为属性名读取对应内容 var val = constants[apiConstant];
比如如果apiConstant的值是'COMPANY_ADD',那constants[apiConstant]就完全等价于constants.COMPANY_ADD,这样就能正确拿到你要的常量值了。
完整示例代码
前端(AngularJS)
const targetKey = 'COMPANY_ADD'; // 你要传递的目标key $http({ method: 'POST', url: 'http://localhost:1620', headers: { 'Content-Type': 'application/json; charset=utf-8', }, data: { apiConstant: targetKey } }).then(function (response) { console.log('获取到的常量值:', response.data); deferred.resolve(response.data); }, function (failureResponse) { deferred.reject({ error: 'Error while getting the data' }); });
Node.js(Express)
const express = require('express'); const app = express(); app.use(express.json()); // 导入你的常量文件 var constants = require('./path/to/your/constant/file'); app.post('/', (req, res) => { const apiConstant = req.body.apiConstant; // 可以加个判断,避免不存在的key导致报错 if (!constants.hasOwnProperty(apiConstant)) { return res.status(400).send({ error: '不存在对应的常量key' }); } const targetValue = constants[apiConstant]; res.send({ value: targetValue }); }); app.listen(1620, () => { console.log('服务器运行在http://localhost:1620'); });
这样就能完美实现你想要的功能啦!
内容的提问来源于stack exchange,提问作者Tarun
相关产品推荐
相关产品推荐

