NodeJs学习笔记(三)
最近在用sails框架写移动后台,马上就过年了,打算总结一下。
- WebStorm:http://www.jetbrains.com/,这家公司非常出名,其Java开发工具首屈一指,并且Android Studio就是以其Java IDE作为底层支撑。它的代码提示非常棒,可惜是收费的,需要花钱购买。
- NetBeans: www.netbeans.org,这个IDE我用的较多,它是免费的,但是它对node本身并不提供支持,它只是支持JS语法,虽然有一个NodeJS插件,但是没多大用处,只是在IDE中执行命令而已,并且它有个很不好的现象,就是会不停的扫描外部更改,而sails在运行时会在根目录下的.tmp目录创建临时文件,不知道是不是这个原因,Netbeans在写NodeJS程序时会突然变慢,所以我现在也不怎么喜欢用这个工具了。当然Netbeans在写Java程序和PHP程序时是相当棒的,比如我使用的Laravel框架,在Netbeans中调试起来挺方便的。
- Aptanata Studio 3:http://www.aptana.com/ ,这个工具是用开脚本语言,如PHP、Python、Ruby的,也支持js语法,不过我没有怎么使用,其PHP调试功能挺强大的。
- Nodeclipse:http://www.nodeclipse.org/,这是个基于Eclipse的插件,要使用起来并不容易,我在windows上用了一下,本来希望提示我自己写的一些函数,但是直接就没反应了,后来就不用了,不知道为什么它名气那么大。
- NTVS:https://nodejstools.codeplex.com/,这是个Visual Studio的插件,功能还不错,可以代码提示,支持免费的Visual Studio社区版以及收费版,不过社区版对版本管理支持的不好,需要在IDE外使用版本管理工具。它也有一些不如人意的地方,比如其格式化代码的方式很奇怪,有的代码能格式化,有的不能,但总体来说,要好一些,打算下一阶段用这个工具。
- Sublime:http://www.sublimetext.com/,sublime是个很强大的编辑器,可以使用一些插件来进行代码提示,当然无法提示自己写的函数,但是对于一般的应用来说也够了,因为我用netbeans的时候,也无法提示自有函数,也无法调试。而且它比较轻量级,比较节省资源。只不过它需要收费,虽然不破解也能使用,但是让人不怎么舒服。
- Nodepad++:http://notepad-plus-plus.org/,这是个免费的编辑器,不如Sublime强大,但是也可以通过一些插件来解决问题,比如有一个插件JSTool,可以用来格式化JS代码,比较轻量级,修改小问题,我经常使用这个。
总的来说,我比较喜欢用的有Netbeans、NTVS和Nodepad++
adapter: 'redis',host: '192.168.1.110',port: 6379,ttl: 86400,db: 0,pass: '',prefix: ''这就可以使用了,在nodejs中使用远程session,还有一个必要性,就是V8引擎的内存限制,所以不要在主线程中存储不必要的临时变量,因为如果达到内存上限,就会导致垃圾回收或者系统出现问题。
2)文件上传
req.file('avatar').upload({dirname : 'pathName'}, function (err, uploadedFiles) {if (err) {sails.log.error(err);return res.negotiate(err);}return res.json({message : uploadedFiles.length + ' file(s) uploaded successfully!'});});
avatar是上传的文件名,如果是form上传,就是<input type=file name=avatar>上传的文件,这个文件可以支持多文件同时上传,如果不指定dirname,则会上传到默认临时目录,文件名是随机生成的,uploadFiles是个数组,基本格式如下[{fd : 'd:\\temp\\2aee7706-d0a9-4e1e-9ac0-c17ecf48be44.png',size : 48177,type : 'image/png',filename : 'aa.png',status : 'bufferingOrWriting',field : 'image',extra : undefined}]可知保存的文件名为uploadFiles[i].fd,如果要修改文件名或移动文件,需要使用标准的fs包,也可以使用fs-extra包,它可以npm安装,也可以在github.com上查找相应的信息。在移动后台开发中,常常要将上传文件和保存到数据库分开,即上传文件到临时文件,在保存信息的同时,再操作文件,所以需要客户端上传文件名或地址,调用fs包来移动或改名文件。
3)ORM
- 数据库连接保存在config/connection.js,可以选择多种数据库,不过注意需要安装相应的驱动
- 默认的model配置保存在config/model.js,包括一些默认设置,如默认的数据库连接(connection),默认的属性(attributes),默认的移植方式(migrate),移植方式指的是是否根据模型生成数据库,我习惯于先生成数据库,再写模型,所以这里设置为safe,这个文件也可以保存一些表中共有的字段,如createdAt,updatedAt
- 配置文件Model:保存在api/model目录下,基本内容如下
module.exports = {
tableName : 's_user',attributes : {user_code : {type : 'string'},user_password : {type : 'string'},user_email : {type : 'string'},user_mobile : {type : 'string'}}};总体来说,非常简单,tableName是数据库中的表名,attributes是列名,默认情况下属性值就是列名,如果不一样,可以增加一个columnName属性,如果关联了另外一张表,增加model属性,如下
module.exports = {
tableName: 't_dep',
attributes: {
hospital_name: {type: 'string'},
hospital_grade: {type: 'integer'},
province: {model: 'district'},
city: {model: 'district'},
county: {model: 'district'},
hospital_address: {type: 'string'},
hospital_desc: {type: 'string'},
hospital_longititude: {type: 'float'},
hospital_latitude: {type: 'float'},
hospital_postcode: {type: 'string'},
hospital_tel: {type: 'string'},
created_user: {model: 'user'},
updated_user: {model: 'user'}
}
};
- 调用
调用起来非常简单,在api/controller下的控制器文件中,直接使用模块名即可,不需要require,如User.create(),User.find()等基本方法如下:.count().create().destroy().find().findOne().findOrCreate().native().query().stream().update()这些方法都非常容易看到用法,具体内容查看sailsjs的官方文档即可。
- populate:
populate用来获取关联表的数据,如Doctor.find({id:doctor_id}).populate('user').exec(function(err, doctors){}),在某些情况下非常容易处理
- 注意:
需要注意的是这些方法都是异步调用的,所以在复杂逻辑的时候需要嵌套回调函数,或者使用流程控制如async库在配置表中的attribute的内容中不存在的属性,是无法查询和更新的,所以在更新了数据库之后要随时记着更新attribute
4)WebSocket
NodeJs学习笔记(三)的更多相关文章
- nodejs学习笔记<三>关于路由(url)
在网站开发中,路由的设置非常关键.nodejs对路由处理封装了一个比较全面的模块. 来认识下url模块 1)在命令行(cmd)可以直接 node —> url 可直接查看url模块的所有方法. ...
- nodejs学习笔记三——nodejs使用富文本插件ueditor
在做自己的nodejs项目的时候遇到需要使用ueditor.原来下载的是ueditor的jsp版本.目录如下 在ueditor.config.js中有配置服务器home路径(这个home路径能找到u ...
- NodeJS学习笔记三
map map对象是一个简单的键/值映射.任何值(包括对象和原始值)都可以用作一个键或一个值. var m = new Map(); var o = {p: "Hello World&quo ...
- nodejs学习笔记三(用户注册、登录)
1.定接口 /user 接口 输入 act=reg&user=aaa&pass=123456 输出 {& ...
- Nodejs学习笔记(三)——一张图看懂Nodejs建站
前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试 ...
- Nodejs学习笔记(四)——支持Mongodb
前言:回顾前面零零碎碎写的三篇挂着Nodejs学习笔记的文章,着实有点名不副实,当然,这篇可能还是要继续走着离主线越走越远的路子,从简短的介绍什么是Nodejs,到如何寻找一个可以调试的Nodejs ...
- Nodejs学习笔记(十六)--- Pomelo介绍&入门
目录 前言&介绍 安装Pomelo 创建项目并启动 创建项目 项目结构说明 启动 测试连接 聊天服务器 新建gate和chat服务器 配置master.json 配置servers.json ...
- Nodejs学习笔记(十六)—Pomelo介绍&入门
前言&介绍 Pomelo:一个快速.可扩展.Node.js分布式游戏服务器框架 从三四年前接触Node.js开始就接触到了Pomelo,从Pomelo最初的版本到现在,总的来说网易出品还算不错 ...
- NodeJS学习笔记 进阶 (12)Nodejs进阶:crypto模块之理论篇
个人总结:读完这篇文章需要30分钟,这篇文章讲解了使用Node处理加密算法的基础. 摘选自网络 Nodejs进阶:crypto模块之理论篇 一. 文章概述 互联网时代,网络上的数据量每天都在以惊人的速 ...
- NodeJS学习笔记 进阶 (1)Nodejs进阶:服务端字符编解码&乱码处理(ok)
个人总结:这篇文章主要讲解了Nodejs处理服务器乱码及编码的知识,读完这篇文章需要10分钟. 摘选自网络 写在前面 在web服务端开发中,字符的编解码几乎每天都要打交道.编解码一旦处理不当,就会出现 ...
随机推荐
- 图片转换base64数据上传,并且实现预览的简便方法
对于很多新手来说,实现上传图片并且预览功能,都会感到不知所可,然后开始在网站搜索各种各样的图片上传预览插件,但是有的时候我们只是想简单的实现判断格式,以及预览的功能,使用插件的话,会使得项目的资源空间 ...
- django作业练习
---权限管理系统 要求: 1,登陆: a,装饰器判断用户是否已经登陆 b,用户密码使用md5发送 2,注册 a,检测用户是否已经存在,onblur+ajax光标跳出输入框时(使用ajax) 3,注销 ...
- 关于web程序中使用KindEditor向数据库插入带有格式的数据时出现的问题
最近做一个项目,需要对输入的文字在存入数据库之前进行文本格式编辑,于是我用到了KindEditor,当然怎么用在asp.net页面中,这里就不过多叙述了. 主要是遇到在将赋予格式的文本插入数据库时遇到 ...
- Python [习题] 求最长共同子串
s1 = 'abcdefg's2 = 'defabcdoabcdeftw's3 = '1234a's4 = 'wqweshjkb's5 = 'defabcd's6 = 'j' 求 s1.s3.s4.s ...
- (ajax)——jquery用法
例子:/* ajax获得状态 */ 点击事件 $("#findBycname").click(function(){ var company = ...
- 玩转html
简介 CSS 是什么? CSS是Cascading Style Sheets的简称,中文称为层叠样式表. 作用 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象 ...
- uva 1418 - WonderTeam
题意:你n支球队进行比赛,每两支队伍之间进行2场比赛,胜得3分,平得1分,输得0分,比赛后挑选出一个梦之队,要求进球总数最多,胜利场数最多,失球总数最少,并且三种都不能与其它对比列第一.问说梦之队的最 ...
- 51Nod--1049最大子段和
1049 最大子段和 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 N个整数组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a ...
- MySQL 性能优化的最佳20多条经验分享(一)(转)
当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这 ...
- Tp3.2 和 Tp5.0之间的区别
5.0版本和之前版本的差异较大,本篇对熟悉3.2版本的用户给出了一些5.0的主要区别. URL和路由 5.0的URL访问不再支持普通URL模式,路由也不支持正则路由定义,而是全部改为规则路由配合变量规 ...