大锅们,球解答!
碰到个问题,我数据库表中的一个字段数据类型为tinyint,前端正常传值过去,true为1,false为0,当前端请求,nodejs获取到数据的时候将这个1和2又转成了true和false,但是这个时候,数据到了前端后,true又变成了false是怎么回事啊
该回答引用NewBing
你好,根据你的描述,我猜测你的问题可能是由于前端传递的true和false被转换成了字符串类型,而后端在接收到这些字符串时将它们转换回了布尔类型。这种情况下,如果你使用的是MySQL数据库,那么你可以在查询时使用CAST函数将tinyint类型转换为布尔类型。例如:
SELECT CAST(your_tinyint_column AS BOOLEAN) FROM your_table;
如果你使用Sequelize作为ORM,那么你可以在模型定义中将tinyint类型映射为布尔类型。例如:
const YourModel = sequelize.define('your_model', {
your_tinyint_column: {
type: DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
});
希望这些信息能够帮助到你。如果你有任何其他问题,请随时问我。
源: 与必应的对话, 2023/4/19
(1) Node.js. https://nodejs.org/es.
(2) Node.js 教程 | 菜鸟教程. https://www.runoob.com/nodejs/nodejs-tutorial.html.
(3) 什么是 Nodejs ? - 知乎. https://zhuanlan.zhihu.com/p/47822968.
(4) Node.js. https://nodejs.org/.
(5) Node.js Introduction - W3School. https://www.w3schools.com/nodejs/nodejs_intro.asp.
(6) nodejs接受前端传来的参数并返回数据 - CSDN博客. https://blog.csdn.net/Hr_ving/article/details/121205611.
(7) 如何用nodejs实现前后端传值_nodejs后端向前端注入js_kotomi_du的博客-CSDN博客. https://blog.csdn.net/github_38818603/article/details/78858427.
(8) Nodejs 实现后端数据到前端 - CSDN博客. https://blog.csdn.net/xiaoyuan9527/article/details/120873435.
(9) javascript - convert tinyint field as boolean in result using sequelize .... https://stackoverflow.com/questions/48881009/convert-tinyint-field-as-boolean-in-result-using-sequelize-raw-query-node-js.
(10) 解决: 前端传值true或false后端一直为false - CSDN博客. https://blog.csdn.net/qq_39809613/article/details/109674387.
(11) NodeJs中将TinyInt转换为Boolean - 简书. https://www.jianshu.com/p/0b92bf510ca7.
对于这个问题,可能由于前端传递的true和false是字符串类型,而在nodejs中,默认情况下会将字符串类型的"1"和"0"转化为布尔类型的true和false,进而导致传输到前端后,又被转换回来,出现了问题。解决方案可以尝试将接收到的数据进行强制类型转换,将接收到的布尔类型的true和false转化为数字类型的1和0,或者直接使用三元表达式进行转换:
//强制类型转换
let result = Number(req.body.key) //或者 parseInt(req.body.key)
//三元表达式
let result = req.body.key === "true" ? 1 : 0
需要按照实际情况选择合适的转换方法。