NodeJS服务器端平台实践记录

【2015 node.js learning notes】by lijun

01-note

Nodejs是服务器端的javascript,是一种单线程、异步I/O、事件驱动型的javascript;其基本架如下:

n Node标准库(javascript实现)

n C/C++实现

u Node下层接口

u V8核

u Libuv/Libio/Libev/IOCP

Nodejs是CommonJS规范API的一种实现。

2-note

Nodejs的下载、安装、测试(windows版本)、运行,npm node包管理安装supervisor

v 下载地址:https://nodejs.org

v 安装 Nodejs 4.1.2

v 测试:win+R命令行窗口 测试指令:node ,结果:>,两次Ctrl+C即可退出

v 创建记事本编写:console.log(“this is a test for nodejs”);保存为test.js

v 命令行窗口运行test.js文件 指令: node  路径+test.js,回车即可运行

v npm安装 supervisor 指令:npm install -g supervisor

3-note

Nodejs http、fs、events模块例子

n Http服务器:node_httpserver.js

var http=require("http");

var server=new http.Server();

server.on("request",function(req,res){

res.writeHeader(200,{"content-type":"text/html"});

res.write("<h1>Nodejs httpserver test </h1>");

res.end("<p>this is a test for nodejs httpsever</p>");

});

server.listen(3000);

console.log("nodejs httpserver is listening port 3000");

n 运行httpserver.js: node httpserver.js 浏览器地址输入http://127.0.0.1:3000

n Fs 文件系统:node_fs.js

var fs=require("fs");

function callbackF(err,data){

if(err)

console.error(err);

else

console.log("the data of test.txt: \n"+data);

}

fs.readFile("node_fs.js.txt","UTF-8",callbackF);

n Events事件:node_event.js

var event=require("events");

var emiter=new event.EventEmitter();

function callbackF(param1,param2){

console.log("Name: "+param1+" password: "+param2);

}

emiter.on("myevent",callbackF);

emiter.emit("myevent","lijun","123456");

emiter.emit("myevent","admin","123456");

n 创建与加载模块

① 创建:

//mymodule.js

function hello(){

var name;

this.setName=function(pname){

name=pname;

}

this.sayhello=function(){

console.log("hello "+name);

}

}

module.exports=hello;

② 加载:

//node_testm.js

var hello=require("./node_module.js.txt");

var myhello=new hello();

myhello.setName("nodejs");

myhello.sayhello();

运行测试:node node_testm.js

n 12

4-note

Express框架开发WEB应用

n 安装Express:npm install -g express及npm install -g express-generator

n 创建Express项目:express -t ejs 项目名称(当前目录创建)

n 按提示进入项目文件夹: cd 项目名称,再安装依赖:  npm install

n 按提示设置环境变量 set debug=项目名称:*,再启动npm: npm start

n 浏览器测试创建的web项目http://127.0.0.1:3000(旧版本nodejs运行项目:node app.js)

n Express工程项目结构

  • app.js    项目启动及配置文件
  • package.json 项目及依赖信息
  • Views(index.ejs/jade)  视图文件夹(继承模板引擎布局的文件)
  • Views(layout.ejs/jade) 视图文件夹(模板引擎布局文件)
  • Routes(index.js) 路由控制文件夹(路由控制文件) 
  • Public 公共服务文件夹(javascripts子文件夹/images子文件夹/stylesheets子文件夹)
  • 其它

4-note

MongoDB非关系型数据库以及第三方Mongoose

n 下载安装新版本windows MongoDB,解压包即可完成安装

n 创建数据库文件夹命名为数据库名称dbname  如:E:\mongodb\dbname

n 进入E:\mongodb\bin\,设置并启动db指令:mongod  -dbpath E:\mongodb\dbname

Express WEB项目中连接mongodb数据库以及创建回话:

n 修改项目的package.json文件:

“denpendencies”:”mongodb”:”*”,

n 运行npm install安装依赖

n 在项目根目录创建db_setting.js

module.exports={

cookieSecret: “lijun”,

db: “mydb”,

host: ”localhost”

}

n 在项目根目录创建models文件夹,其中创建db.js:

var set=require(“../db_setting”),

Db=require(“mongodb”).Db,

Connection=require(“mongodb”).Server,

Server=require(“mongodb”).Server;

module.exports=new Db(set.db,new Server(se.host,Connection.DEFAULT_PORT),{safe:true});

n 创建会话

“denpendencies”:”connect-mongo”:”*”,

n 运行npm install 安装依赖

n 修改app.js文件:

var mongostore=require(“connect-mongo”)(express);

var set=require(“./db_setting ”);

//在methodOveride后

app.use(express.cookieParser());

app.use(express.session(){

secret:set.cookieSecret,

key:set.db,

cookie:{maxage:1000*60*60},//1 hour

store:new mongostore({

db:set.db

})

});

n

5-note

MongoDB常用的基本指令:

6-note

Nodejs的视图助手,功能为通过视图助手可访问一个全局的函数或对象。视图助手分为

① 静态视图助手:类型可以是任意类型的函数(可受参数)及对象

② 动态视图助手:类型下仅可以是函数(不可受参数),可访问 response与request对象

示例:

app.helpers(

inspect: function(obj){

return obj;

}

);

app.dynamicHelpers(

user: function(req,res){

rerurn req.session.user;

}

);

7-note

模块类型:核心模块(http/fs/net/etc)、文件模块(.json/.js/c++/c)

模块加载机制:

① 以相对路径“./模块名称(require(“./setting.js”))”或者“../模块名称(require(“../setting.js”))”方式加载模块

第一种方式require(“./setting.js”):当前文件需要加载与自己同目录的下的setting.js文件;第二方式require(“../setting.js”):当前文件需要加载与自己所在的目录X,与X目录所在目录的下的setting.文件。

② 以绝对路径方式加载:首先从当前文件所在的目录查找,再依次往上一级目录查找。

加载缓存:同一模块再次被加载时,直接从内存中加载,而不是再次把相同模块载入缓存再加载;即不会使内存重复加载已加载过的相同的模块实例。

时间: 2025-02-01 22:46:08

NodeJS服务器端平台实践记录的相关文章

搜狐云景paas平台实践之路

前言: 搜狐云景作为搜狐的paas平台,在2014年5月22日的云计算大会上正式发布了公测.初测,注册用户必须先申请邀请码参与公测会赠送用户100元电子券,经过实名认证之后会再赠送100电子券,目测可以对试用用户基本app够跑半年. 除了用户中心的一些基本安全信息设置和各种账单外,我想主要对其控制台的使用进行研究一番. 废话不多说,在绑定邮箱并充值10元成正式用户之后,无阻挡进行各种测试吧. dashboard很清新干净,是一个对用户基本消费情况和使用资源服务的基本概览. -----------

Nodejs RESTFul架构实践之api篇(转)

why token based auth? 此段摘自 http://zhuanlan.zhihu.com/FrontendMagazine/19920223 英文原文 http://code.tutsplus.com/tutorials/token-based-authentication-with-angularjs-nodejs–cms-22543 在讨论了关于基于 token 认证的一些基础知识后,我们接下来看一个实例.看一下下面的几点,然后我们会仔细的分析它: 多个终端,比如一个 web

软交所“猎豹移动运营环境云平台实践”主题沙龙成功举办

2014年8月6日下午,由软交所举办的"猎豹移动运营环境云平台实践"主题沙龙活动在中关村知识产权大厦二层软交所第一会议室成功举办. 为向各会员企业普及私有云的概念,促进会员企业之间相关业务交流,软交所特邀请猎豹移动(金山网络)技术VP 杨钢为大家分享了猎豹移动在复杂运营环境中逐步实施私有云方案的一些经验.新致软件.中科同向.数讯达通信.广点广告传媒.IT决策人网.唐密科技.飞鸟视界科技.麒麟网.中电普华.达沃时代.简单科技等40余家会员单位的企业领导.代表参加了本期沙龙. 分享嘉宾:杨

k8s1.4.3安装实践记录(2)-k8s安装

前面一篇已经安装好了ETCD.docker与flannel(k8s1.4.3安装实践记录(1)),现在可以开始安装k8s了 1.K8S 目前centos yum上的kubernetes还是1.2.0,因此我们只能是使用下载的安装包,进行kubernetes的安装 [[email protected] system]# yum list |grep kubernetes cockpit-kubernetes.x86_64 0.114-2.el7.centos extras kubernetes.x

Nodejs RESTFul架构实践之api篇

why token based auth? 此段摘自 http://zhuanlan.zhihu.com/FrontendMagazine/19920223 英文原文 http://code.tutsplus.com/tutorials/token-based-authentication-with-angularjs-nodejs–cms-22543 在讨论了关于基于 token 认证的一些基础知识后,我们接下来看一个实例.看一下下面的几点,然后我们会仔细的分析它: 多个终端,比如一个 web

nodejs使用tcp协议编程(nodejs服务器端,java客户端)

var net = require ('net'); var HOST = '192.168.1.50'; var PORT = 8809; net.createServer(function(sock){ console.log('CONNECTED:'+sock.remoteAddress + ":"+ sock.remotePort); sock.on('data',function(data){ console.log('DATA'+sock.remoteAddress +&q

Ionic3项目实践记录

Ionic3首次项目实践记录 Ionic3踩坑 1. 路由懒加载(lazy load) 如果设置了懒加载,就必须全部懒加载(包括TabsPage),否则会出现路由跳转后tabs消失的情况. 2. 通过ts来返回tabs的首页: 注意必须通过this.app.getRootNav().setRoot('tabs');,不能到home,否则,tabs会消失. 参见stackoverflow | Issues import { App } from "ionic-angular"; @Ion

[vsCode实践] 实践记录

[vsCode实践] 实践记录 版权2019.5.1更新 Q1:代码中涉及到操作本地文件时,相对路径总是不对 操作本地文件时,路径方式有两种 相对路径 例如:代码文件所在路径/Users/tp0829/Code_Python/myAlarmScript.py 则代码中要操作文件的相对路径music/CarryYou.wav所对应的绝对路径为:/Users/tp0829/Code_Python/music/CarryYou.wav 绝对路径 以macOS为例:绝对路径/Users/tp0829/C

nodejs和mongodb实践

首先,当然是都安装了nodejs 和mongodb了.这必须是前提条件. 现在我们要用nodejs连接mongodb数据库了.我这里只是一个非常非常简单是实践,初学嘛.更深入的学习之后,我会仔细写笔记记录的.自己走过的弯路,遇到的问题,肯定有价值的.好了,不多说了,开始动手吧. 我是在D盘nodework目录下创建了一个mytest文件夹的,然后在里面创建一个test.js.接着用npm安装mongodb,在cmd窗口找到新建的文件夹目录,命令 npm install mongodb 这样只会在