node.js学习笔记(26) node-orm进阶一

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 上一个笔记中,我们已经认识了node-orm,它可以支持mongodb、mysql、postgres、  redshift、 _shared和sqlite。

上一个笔记中,我们已经认识了node-orm,它可以支持mongodb、mysql、postgres、  redshift、 _shared和sqlite。


之所以能支持这么多中数据库,是因为node-orm的lib中有对各种数据库支持的backend脚本,可以看一下orm/lib/Drivers/DML目录下的文件有mongodb.js、mysql.js、postgres.js、redshift.js、_shared.js、sqlite.js。这其中的每一个脚本其实都是对各种数据库驱动的封装,以mysql.js为例,我们可以看一下它的源码,它是依赖于mysql模块的。


mysql.js:
var _       = require("lodash");
var mysql   = require("mysql");
var Query   = require("sql-query").Query;
var shared  = require("./_shared");
var DDL     = require("../DDL/SQL");

exports.Driver = Driver;
...

找到了node-orm的根源,再来学习和使用node-orm,是不是有底气多了!

Properties

先看上一篇笔记中的源码片段:
    var User = db.define("user", {
        id          :Number,
        name        :String,
        username    :String,
        password    :String,
        birthday    :Date
    });

这是Model定义的一种写法,把数据库的数据类型映射为node.js的类型,长度、唯一、是否可空等配置将使用数据库中的定义。Node.js的类型有Number、String、Boolean、Date、Object、Buffer和
Array。
还有一种更常用的写法,可以设置field的更多信息:
    var User = db.define("user", {
        id          :{type:'serial', mapsTo:'id', unique:true, size:11},
        name        :{type:'text', mapsTo:'name'},
        username    :{type:'text', mapsTo:'username'},
        password    :{type:'text', mapsTo:'password'},
        birthday    :{type:'date', mapsTo:'birthday', time:true}
    });

Node-orm支持10种类型:
  • text: A text string;
  • number: A floating point number. You can specify size: 2|4|8.
  • integer: An integer. You can specify size: 2|4|8.
  • boolean: A true/false value;
  • date: A date object. You can specify time: true
  • enum: A value from a list of possible values;
  • object: A JSON object;
  • point: A N-dimensional point (not generally supported);
  • binary: Binary data.
  • serial: Auto-incrementing integer. Used for primary keys.
注意:
每个类型都有require、defaultValue和size三个属性。text支持size和big(true/false,for大文本)。number支持size(表示位数)和unsigned(true/false)。date支持time(true/false,是否包含时间)。

除此之外,我们还可以自定义类型:
db.defineType('numberArray', {
  datastoreType: function(prop) {
    return 'TEXT'
  },
  // This is optional
  valueToProperty: function(value, prop) {
    if (Array.isArray(value)) {
      return value;
    } else {
      return value.split(',').map(function (v) {
        return Number(v);
      });
    }
  },
  // This is also optional
  propertyToValue: function(value, prop) {
    return value.join(',')
  }
});
var LottoTicket = db.define('lotto_ticket', {
  numbers: { type: 'numberArray' }
});




相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
11天前
|
JavaScript 前端开发 安全
【逆向】Python 调用 JS 代码实战:使用 pyexecjs 与 Node.js 无缝衔接
本文介绍了如何使用 Python 的轻量级库 `pyexecjs` 调用 JavaScript 代码,并结合 Node.js 实现完整的执行流程。内容涵盖环境搭建、基本使用、常见问题解决方案及爬虫逆向分析中的实战技巧,帮助开发者在 Python 中高效处理 JS 逻辑。
|
4月前
|
JavaScript 前端开发 开发者
Node学习笔记:HTTP模块
总的来说,Node.js的HTTP模块是一个强大的工具,可以帮助你处理HTTP协议的各种需求。无论你是想开设自己的餐厅(创建服务器),还是想去别的餐厅点菜(发出请求),HTTP模块都能满足你的需求。
131 18
|
10月前
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
291 1
|
5月前
|
存储 JavaScript 前端开发
在NodeJS中使用npm包进行JS代码的混淆加密
总的来说,使用“javascript-obfuscator”包可以帮助我们在Node.js中轻松地混淆JavaScript代码。通过合理的配置,我们可以使混淆后的代码更难以理解,从而提高代码的保密性。
444 9
|
9月前
|
存储 JavaScript NoSQL
Node.js新作《循序渐进Node.js企业级开发实践》简介
《循序渐进Node.js企业级开发实践》由清华大学出版社出版,基于Node.js 22.3.0编写,包含26个实战案例和43个上机练习,旨在帮助读者从基础到进阶全面掌握Node.js技术,适用于初学者、进阶开发者及全栈工程师。
148 9
|
10月前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API
使用JavaScript和Node.js构建简单的RESTful API
|
10月前
|
开发框架 JavaScript 前端开发
Node.js日记:客户端和服务端介绍、Node.js介绍
Node.js日记:客户端和服务端介绍、Node.js介绍
|
10月前
|
JavaScript 前端开发 开发工具
Node.js——初识Node.js
Node.js——初识Node.js
140 4