分类目录归档:nodejs

NodeJS addons 中文乱码处理

在使用nodeJS的addons模块进行处理中文字符的时候,总是乱码。期间查询过很多关于C++或者C的中文乱码解决办法,但是大多都是直接在原生的C以及C++中使用,并没有专门的在V8引擎中直接使用的实例,由此我从网上拷贝了几个代码过来后,发现编译的过程中一直都是报错的,也就是说无法直接使用啊!通过跟底层开发的同事的不断努力,终于在nodeJS中搞出来了编码转换的问题,并且测试通过,代码如下:

int code_convert(char *from_charset,char *to_charset,char *inbuf,size_t* inlen,char *outbuf,size_t* outlen){
  iconv_t cd;
  int rc;
  char **pin = &inbuf;
  char **pout = &outbuf;

  cd = iconv_open(to_charset,from_charset);
  if (cd==0) return -1;
  std::memset(outbuf,0,(int)(*outlen));
  if (iconv(cd,pin,inlen,pout,outlen)==-1) return -1;
    iconv_close(cd);
    return 0;
}
//UNICODE码转为GB2312码
int u2g(char *inbuf,size_t* inlen,char *outbuf,size_t* outlen){
  return code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);
}
//GB2312码转为UNICODE码
int g2u(char *inbuf,size_t* inlen,char *outbuf,size_t* outlen){
  return code_convert("gb2312","utf-8",inbuf,inlen,outbuf,outlen);
}

使用方法

  int inLen = strlen(ctext);
  size_t inLenSize,outLenSize;
  inLenSize = inLen;
  outLenSize = 256;
  char outBuf[outLenSize];
  //printline();
  int convLen = u2g(ctext, &inLenSize,outBuf,&outLenSize);

利用nodeJS发送邮件

做过后端的童鞋都知道发送邮件这样的功能并不复杂,使用目前已有的后端技术比如java、.net、php等编写一个发送邮件的功能是很简单的,但是要编写很多代码,比如java中利用jmail发送邮件并不是一件简单的事情。随着nodeJS的发展,如今利用前端技术实现发送邮件,简直是小菜一碟,不仅仅是代码量减少了,也提高了开发效率。
今天主要说的是使用nodeJS的Nodemailer发送邮件
1、首先我们得准备一个QQ邮箱或者GMAIL邮箱(只要支持smtp服务的就可以),主要用于发送邮件。比如QQ邮箱我们可以做如下设置即可开启POP3/SMTP服务,并且可以发送邮件。
进入QQ邮箱后点击左上角的设置,再选择账户,如图

QQ邮箱POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
QQ邮箱POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务

将其全部设置为开启即可,这样就可以利用QQ邮箱发送邮件了。 继续阅读利用nodeJS发送邮件

使用webpack配置ES6开发环境

1、ES6简介

由于ES6无法直接运行在浏览器中,只能通过babel来进行解析转换(编译)成ES5才可以运行在浏览器中,因此我们就需要给ES6搭建相关的环境,才可以开心的写ES6。
目前很多框架都使用了ES6,比如react、vuejs、angular等这些主流前端框架。ES6简洁了很多ES5的代码,让我们可以少写很多代码,当然如果你还了解typescript以及coffeescrpt,那么就更加方便你进行各种开发了。但是问题来了,这些基于ES6的所有框架以及语法糖都需要搭建相关的环境才能够正常运行ES6

2、webpack

webpack是一个前端打包工具,简单说webpack是将所有JavaScript组件以及依赖的库整合为一个js文件,将所有CSS整合为一个css文件。使用webpack可以很方便的打包各种JavaScript组件。

3、准备工作

1)、安装nodeJS(安装方法请到官方查看)
2)、使用npm初始化项目

npm init ES6

ES6是我们开发的项目文件夹
运行上面的命令后会让你填写一些有关项目描述等信息,并且在ES6文件夹下会生成一个package.json的文件
3)、全局安装webpack
npm install -g webpack

4、安装依赖

配置ES6环境,我们需要安装以下几个必须的依赖包 继续阅读使用webpack配置ES6开发环境

使用express+mysql实现分页效果

在mysql中SQL语句有一个为limit的条件筛选,limit中如果只传递一个值,则表示获取的条数,如果传递两个值则表示从第几条记录到第几条,如下:
limit 10 //这里是需要从数据库读出10条数据
limit 2,10 //这里这是从数据库中第3条数据开始取10条数据

1、使用limit实现分页(此方法不推荐,因为看上去不那么高大上)

不推荐就是因为不高大上,无法显示你是程序猿,因此你可以了解下就可以了! 继续阅读使用express+mysql实现分页效果

mongodb中模糊查询

mongodb中实现模糊查询可以直接使用正则表达式,官方也给出了reg的查询方式,首先我们直接来实现下基本的模糊查询,代码很简单,也非常实用,如果你已经创建了一个数据库,并且里面包含了数据,那么你可以直接在命令行使用如下命令进行模糊查询:

db.col.find({name:/小强/})

我们可以看到“/小强/”,这个就是正则表达式了,我们也可以直接使用/^小强/等等正则表达式,都可以查询到相关数据。
但是问题来了,我们在写程序的时候,用户可能查询的是一个变量,这个值并不是固定的,因此使用这样的方法,仅能固定一个关键词。我之前试过以下方法,但是并没有通过

var query="/"+key+"/";
User.find({name:query},function(res,req,next){
.....
});

这种方式,我总是无法获取到我想要的数据,而且返回的都是空,最终我发现了问题,应该是我所定义的query是一个string格式,而并不是正则表达式,因此这种方法是不可行的,大家也不要再使用这样的方式了。下面我将直接使用RegExp方式进行查询。这也是最终能够真正实现模糊查询的方法。

var keyword=req.params.keyword;
var key = {'name': new RegExp(keyword)}; //模糊查询参数
Job.find(key,function (err, jobs) {
        if (err) {
            return res.send(err);
        }
        res.json(jobs);
    })

到此,我们可以实现真正的模糊查询了!

node+express图片上传实例

如果使用node+express作为后端的话,肯定是避免不了上传的,因此我们需要使用node+express来对图片或者其他文件进行上传。如果你不使用express也是可以的。这里我们需要使用到一个node插件formidable,这个插件主要提供的就是上传功能。下面开始我们的项目吧。
首先你得搭建node+express环境,如果不知道怎么搭建的,请看我之前写的一篇文章《node+express+mongodb注册登录实例》,文章前半部分有关于环境搭建的说明。搭建完成后,我们需要安装formidable插件,在node中插件安装的方法就是直接使用命令,在项目当前目录下,直接执行npm install xxxx –save(xxxx是插件名称,–save则是将插件写入packge.json文件中)即可安装插件,如此安装formidable就使用以下命令即可:
npm install formidable –sava
也可以使用简写的命令
npm i -S formidable //(i即install,-S,这里的s是大写的,即sava)
安装完成之后,我们首先直接在index.ejs或者index.jade中添加一个表单form,内容如下: 继续阅读node+express图片上传实例

node+express+mongodb注册登录实例

如果你之前对mysql以及Oracle等关系数据库有过了解的话,那么你mongodb对于你来说上手应该是很快的。但是mongodb并不是使用诸如mysql与Oracle中的select、delete、update等关键字进行SQL查询的,因为具mongodb官方介绍说,mongodb是一个nosql的数据库,也就是说,他不需要你对sql语句有一定的了解,但是如果你已经了解了sql语句,那么我相信你学习起来是很快的。
网上已经很多这方面的教程了,为什么我还要在写一次?
主要是因为我在参照网上的相关例子的时候遇到了不少问题,有些例子要么是express版本低,要么就是代码不完整,因此我才打算写这一篇文章来与大家分享下学习心得。本文仅作为express+mongodb入门教程。使用的express版本为~4.15.2,

一、准备工作

看到标题就知道应该需要安装些什么软件了吧,我们需要在电脑上安装nodejs和mongodb,而express是nodejs的一个插件,因此需要通过nodejs来进行安装。
nodejs与mongodb的安装非常的简单,只要你会安装QQ,会安装游戏,那么你就会安装nodejs和mongodb了。不过我们需要注意的是,mongodb安装后,我们需要对其进行相应的设置,以提高我们的开发效率。关于mongodb的使用方法,请大家查看官方的文档。
安装好了mongodb后,我们给mongodb的bin目录添加到环境变量里面,这样我们就可以直接在命令提示符中直接使用mongodb的命令了,省的还要跑到mongodb目录下输命令。下面是设置mongodb的环境变量的方法。

1、mongodb添加环境变量

在桌面上,我的电脑(计算机或者此电脑)右键,点击属性,选择左边的“高级系统设置”,在弹出窗口中,选择“高级”,看到右下角有个“环境变量”,点击它。
之后我们在“系统变量”(不是Administrator的用户变量)中Path中将mongodb的bin目录填写进去,比如我的bin目录是C:\Program Files\MongoDB\Server\3.4\bin。
然后,打开你的命令提示符窗口,输入mongo,如果看到下面的信息,说明你的设置已经成功了。 继续阅读node+express+mongodb注册登录实例