前端资源&前端学习资料我爱编程node

Node.JS简单记录

2017-10-26  本文已影响93人  坚持到底v2

官网

https://nodejs.org/en/download/


个人总结1

个人感觉 node.js 给人最大的困惑是
有时 js文件的作用 是类似于Java(或者说替代Java), 是用来提供服务器端的代码逻辑,包括创建web服务器或提供其他命令行操作;
而有时 js文件的作用 是运行在前端浏览器中的普通js代码,
这一点要区分清楚.

本文后面记录的应该都是作为 运行在服务器端的js代码及用法,
而 大部分的 使用npm管理的 项目基本都已经封装好了 node 这一层要做的工作,只是使用了 npm 的包管理器那一部分.


一. 基础

1. 下载及安装

官网 下载windows或linux的版本

windows的下载安装即可.

以下是centos7的安装过程

basePath="$HOME"
# 定义tarball下载地址,具体版本及链接地址可能会变
downloadUrl="https://nodejs.org/dist/v10.14.1/node-v10.14.1-linux-x64.tar.xz"

curl -LJso "${basePath}/nodejs.tar"  "${downloadUrl}"

# 解压
tar -C ${basePath} -xf ${basePath}/nodejs.tar
# 获取解压后的目录名称
nodejsTarBallDirName=$(getTarballDirName "${basePath}/nodejs.tar")

# 设置环境变量
cat >> /etc/bashrc << EOF
# set for nodejs
export NODE_HOME=${basePath}/${nodejsTarBallDirName}
export PATH=\$PATH:\$NODE_HOME/bin
EOF

2. 查看node版本

node -v 
# 输出 v10.14.1

3. 最简单的Hello World!

新建一个文件 helloworld.js, 内容如下:

cat > helloworld.js << EOF
console.log("Hello World");
EOF

# 运行
node helloworld.js

4.交互模式

# 进入交互模式
node

# 打印到控制台
console.log("Hello World");

# 可以使用tab键补全命令

5. 最简单的服务器

新建一个文件 server.js ,内容如下:

cat > server.js <<EOF
// 使用 require 指令载入 node.js 模块
// 这里载入 http 模块,用于创建服务器
var http= require("http");

// 使用模块提供的命令创建服务器
http.createServer(function(request,response) {
 response.writeHead(200,{'Content-Type':'text/plain; charset=utf-8'});
 response.end('Hello World\n');
}).listen(8888);

// 在终端打印信息
console.log('Server running at http://127.0.0.1:8888/');
EOF

# 然后运行这个js
node server.js

# 然后你可以访问 `http://127.0.0.1:8888` 看看效果

6. npm介绍

npm 是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题.
它允许用户从 npm 服务器 下载 别人编写的第三方包或命令行程序到本地使用;
它允许用户向 npm 服务器 上传 自己编写的第三方包或命令行程序供别人使用;

7. 查看 npm 版本

npm -v 
# 输出 6.4.1

8. 升级npm

npm install npm -g

# 查看npm版本
npm -v 
# 输出 6.5.0

国内使用 npm 速度很慢,你可以使用淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:

npm install -g cnpm --registry=https://registry.npm.taobao.org
npm config set registry https://registry.npm.taobao.org

然后升级npm时可以使用

cnpm install npm -g

9. 使用 npm 命令安装模块

# 安装 web框架模块 -- express
npm install express 

安装好之后, express 包 就放在了 ./node_modules/ 中(一般也就是 ${projectDir}/node_modules/ 中),
然后在 服务端js文件 中,可以像 引入http 模块 那样引入并使用它

// 载入 express 模块
var express=require('express'); 

10. npm 的包安装模式

分为: 本地安装(local)和全局安装(global)

10.1 全局安装

# 全局安装express模块
npm install express -g 

如果出现错误 "npm err! Error: connect ECONNREFUSED 127.0.0.1:8087"

npm config set proxy null

全局安装的包位于 ${NODE_HOME}/node_modules/ 中, 并且可以直接在命令行里使用

查看所有全局安装的模块

npm list -g

查看某个具体模块的版本及安装位置

# 查看 express 模块
npm list express -g 
# 输出
# /home/nodejs/lib
#  └── express@4.16.4 

npm list express 
# 输出
# /[currentDir]
#  └── express@4.16.4 

模块的版本号使用 X.Y.Z , 表示 主版本号.次版本号.补丁版本号

每个模块都有自己的 package.json 文件, 用于定义 包的属性 ,其中包括

卸载模块

# 卸载 express 模块
npm uninstall express 

# 查看 express 模块是否还存在
npm list 

更新模块

# 更新 express 模块
npm update express 

搜索模块

# 搜索 express 模块
npm search express 

发布自己的模块

# 首先创建 package.json , 运行下面的命令 根据提示输入内容
npm init

# 然后在 npm 资源库中注册用户(使用邮箱注册) 
npm adduser

# 发布模块 
npm publish

11. Node.js REPL(Read Eval Print Loop:交互式解释器)

执行 node 命令进入交互式解释器, 然后输入下面的内容感受一下

1+4
x=10
var y=20
x+y
//使用_获取上一个表达式的值
var sum=_
console.log("hello world!")

12. node.js 回调函数

没什么新鲜的,举个例子完事

12.1 同步方式的代码

var fs = require("fs");
var data = fs.readFileSync('input.txt');
console.log(data.toString());
console.log("程序执行结束!");

12.2 异步方式的代码

var fs = require("fs");
fs.readFile('input.txt', function (err, data) {
    if (err) return console.error(err);
    console.log(data.toString());
});
console.log("程序执行结束!");

13. node.js 事件循环

Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件,如下所示:

// 引入 events 模块
var events = require('events');

// 创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter();

// 绑定事件及事件的处理程序
eventEmitter.on('eventName', eventHandler);

// 发射事件
eventEmitter.emit('eventName');

EventEmitter 的每个事件由一个事件名和若干个参数组成。
对于每个事件,EventEmitter 支持 若干个事件监听器。
当事件发射时,注册到这个事件的事件监听器被依次调用,事件参数作为回调函数参数传递。

13.1 带参数的事件例子

eventEmitter.emit('someEvent', 'arg1 参数', 'arg2 参数');
eventEmitter.on('someEvent', function(arg1, arg2) { 
    console.log('listener1', arg1, arg2); 
}); 

13.2 EventEmitter 的其他属性 和 方法

eventEmitter.addListener(event,listener)

eventEmitter.once(event,listener)

eventEmitter.removeListener(event,listener)

//不指定事件就是移除所有监听器
eventEmitter.removeAllListeners([event]) 

//默认为10个
eventEmitter.setMaxListeners(n) 

//返回指定事件的监听器数组
eventEmitter.listeners(event) 

//返回指定事件的监听器数量
EventEmitter.listenerCount(emitter, event) 

eventEmitter 本身也有事件

例如在 eventEmitter.addListener(event,listener) 或 eventEmitter.removeListener(event,listener) 时会发出 newListener事件或removeListener事件,参数是 event 和 listener

EventEmitter 定义了一个特殊的事件 error

当 error 发射时, EventEmitter 规定如果没有响 应的监听器,Node.js 会把它当作异常,退出程序并输出错误信息。 例如:

var events = require('events'); 
var emitter = new events.EventEmitter(); 
emitter.emit('error'); 

// 运行该js文件, 会报告 Uncaught, unspecified 'error' event

14. Node.js Buffer(缓冲区)

Buffer 库为 Node.js 带来了一种存储原始数据的方法,可以让 Node.js 处理二进制数据,每当需要在 Node.js 中处理I/O操作中移动的数据时,就有可能使用 Buffer 库。

原始数据存储在 Buffer 类的实例中。

一个 Buffer 类似于一个整数数组,但它对应于 V8 堆内存之外的一块原始内存

14.1 创建 Buffer 类

创建长度为 10 字节的 Buffer 实例

var buf = new Buffer(10);
var buf = new Buffer([10, 20, 30, 40, 50]);
var buf = new Buffer("www.runoob.com", "utf-8");

14.2 写入缓冲区

语法:

buf.write(string[, offset[, length]][, encoding])

offset默认为0,
length 默认为 buffer.length,
encoding默认为utf-8

例子:

buf = new Buffer(256);
len = buf.write("www.runoob.com");

14.3 从缓冲区读取数据

语法

buf.toString([encoding[, start[, end]]])
buf.toJSON()

encoding默认为utf-8,
start默认为0,
end 默认为缓冲区的末尾

例子:

var buf = new Buffer('www.runoob.com');
var json = buf.toJSON(buf);
console.log(json); 
// 输出 { type: 'Buffer', data: [ 119, 119, 119, 46, 114, 117, 110, 111, 111, 98, 46, 99, 111, 109 ] }

14.4 缓冲区合并

语法

Buffer.concat(list[, totalLength])

totalLength 是 指定合并后Buffer对象的总长度

例子:

var buffer1 = new Buffer('菜鸟教程 ');
var buffer2 = new Buffer('www.runoob.com');
var buffer3 = Buffer.concat([buffer1,buffer2]);
console.log("buffer3 内容: " + buffer3.toString());

14.5 缓冲区比较

buf.compare(otherBuffer);

14.6 拷贝缓冲区

buf.copy(targetBuffer[, targetStart[, sourceStart[, sourceEnd]]])

targetStart默认为0,
sourceStart默认为0,
sourceEnd 默认为 buffer.length

14.7 缓冲区裁剪

buf.slice([start[, end]])

start 默认: 0
end 默认: buffer.length

14.8 缓冲区长度

buf.length

14.8

还有好多其他函数, 略过

15. Node.js Stream(流)

15.1 Stream 类型

Readable; Writable; Duplex; Transform(转换)

15.2 Stream 事件:

15.3 读取流

例子:

var fs = require("fs");
var data = '';
// 创建可读流
var readerStream = fs.createReadStream('input.txt');
// 设置编码为 utf8。
readerStream.setEncoding('UTF8');

// 处理流事件 --> data, end, and error
readerStream.on('data', function(chunk) {
   data += chunk;
});

readerStream.on('end',function(){
   console.log(data);
});

readerStream.on('error', function(err){
   console.log(err.stack);
});

console.log("程序执行完毕");

15.4 写入流

例子:

var fs = require("fs");
var data = '菜鸟教程官网地址:www.runoob.com';

// 创建一个可以写入的流,写入到文件 output.txt 中
var writerStream = fs.createWriteStream('output.txt');

// 使用 utf8 编码写入数据
writerStream.write(data,'UTF8');

// 标记文件末尾
writerStream.end();

// 处理流事件 --> data, end, and error
writerStream.on('finish', function() {
    console.log("写入完成。");
});

writerStream.on('error', function(err){
   console.log(err.stack);
});

console.log("程序执行完毕");

15.5 管道流

例子

var fs = require("fs");

// 创建一个可读流
var readerStream = fs.createReadStream('input.txt');

// 创建一个可写流
var writerStream = fs.createWriteStream('output.txt');

// 管道读写操作
// 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中
readerStream.pipe(writerStream);

console.log("程序执行完毕");

链式流(对比 管道流):

var zlib = require('zlib');
// 先压缩再写入文件
readerStream.pipe(zlib.createGzip()).pipe(writerStream);
// 先解压缩再写入文件
readerStream.pipe(zlib.createGunzip()).pipe(writerStream);

16. node.js 模块系统

模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的。

换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码、JSON 或者编译过的C/C++ 扩展。

例子:

// 引入当前目录下的hello.js文件 (node.js默认后缀为js)
var hello = require('./hello');
// 执行 world 方法
hello.world();

world 方法怎么来的?

Node.js 提供了 exportsrequire 两个对象,其中 exports 用于公开模块的接口, require 用于获取一个模块的接口

例如 hello.js 的内容为

var world=function() {
  console.log('Hello World');
};
exports.world=world;

注意 javascript 一切都是类, 所以 有时候我们如果想把一个对象封装到模块,应该 如下所示:

var Hello=function() {
  var name;
  this.setName=function(thyName) {
    name =thyName;
  };
  this.sayHello = function() { 
    console.log('Hello ' + name); 
  }; 
};
module.exports=Hello;

对应的 main.js 文件内容为:

var Hello = require('./hello'); 
hello = new Hello(); 
hello.setName('BYVoid'); 
hello.sayHello(); 

那么服务端的模块在哪里呢?

也许你已经注意到,我们已经在代码中使用了模块 (例如 var http = require("http"); ), Node.js中存在4类模块(原生模块和3种文件模块),尽管require方法极其简单,但是内部的加载却是十分复杂的,其加载优先级也各自不同。

Node.js 的 require方法中的文件查找策略如下:
(1) 首先从文件模块缓存中加载
(2) 然后从原生模块加载. require方法在解析文件名之后,优先检查模块是否在原生模块列表中。以http模块为例,尽管在目录下存在一个http/http.js/http.node/http.json文件,require("http")都不会从这些文件中加载,而是从原生模块中加载。 原生模块也有一个缓存区,同样也是优先从缓存区加载。如果缓存区没有被加载过,则调用原生模块的加载方式进行加载和执行。
(3) 然后才从文件加载并缓存文件模块

17. node.js函数

没有新意,解释了下 函数作为参数 和匿名函数

// 重写一下 创建服务器 的代码 
var http= require("http");
// 声明函数
var onRequest=function(request,response) {
 response.writeHead(200,{'Content-Type':'text/plain; charset=utf-8'});
 response.end('Hello World\n');
};
// 使用模块提供的命令创建服务器
http.createServer(onRequest).listen(8888);

18. node.js路由

我们要为路由提供请求的URL和其他需要的GET及POST参数, 所需要的数据都包含在 onRequest 函数的第一个对象 request 中.
但是为了解析这些数据,我们需要额外的Node.JS模块,它们分别是 urlquerystring 模块。

var url = require('url');
var querystring = require('querystring');

18.1 用法示例

获取 url 中的 query 部分
var queryStr=url.parse(urlStr).query; 
var queryObj=url.parse(urlStr,true).query;// 加上true 参数后会将query解析成对象格式
获取 url 中的 path 部分
var pathNameStr=url.parse(urlStr).pathname; 
检索 query 字符串中的key
var paramFoo=querystring.parse(queryStr)["foo"]; //或
var paramFoo=queryObj.foo;  

为了搭建一个看起来正常点的服务器,我们将代码进行重构一下

新建 ./server.js , 用来启动服务器并负责解析 url 中的path , 内容如下:

var http = require("http");
var url = require("url");
function start(route) {
  function onRequest(request, response) {
    var pathname = url.parse(request.url).pathname;
    console.log("Request for " + pathname + " received.");

    route(pathname);

    response.writeHead(200, {"Content-Type": "text/plain; charset=utf-8"});
    response.write("Hello World");
    response.end();
  }

  http.createServer(onRequest).listen(8888);
  console.log("Server has started.");
}

exports.start = start;

新建 ./router.js, 用来处理 各种不同的 path ,内容如下:

function route(pathname) {
  console.log("About to route a request for " + pathname);
} 
exports.route = route;

新建main.js,作为主入口,内容如下:

var server = require("./server");
var router = require("./router");

server.start(router.route);

19. node.js全局对象

正如在浏览器 JavaScript 中,通常 window 是全局对象;

在 Node.js 中的全局对象是 global , 所有全局变量(除了 global 本身以外)都是 global 对象的属性。

在 Node.js 我们可以直接访问到 global 的属性,而不需要在应用中包含它

__filename 表示当前正在执行的脚本的文件名。它将输出文件所在位置的绝对路径; 如果在模块中使用它,返回的值是模块文件的路径。

__dirname 表示当前执行脚本所在的目录

console.log( __filename );
console.log( __dirname );
// var t = setTimeout(callback,delay) 全局函数,表示在指定的毫秒(ms)数后执行指定函数,该函数返回的是一个代表定时器的句柄值.
// clearTimeout(t); //停止定时器
// var t=setInterval(cb, ms);
// clearInterval(t);

// console.log([data][,...]); //提供类似于C语言的printf()函数
// console.info | error | warn
// console.time(label) 和 console.timeEnd(label) : 计时开始和结束,使用 console.log(label) 来打印计时时间
// console.trace(message[,...]); //当前执行的代码在堆栈中的调用路径,这个测试函数运行很有帮助,只要给想测试的函数里面加入 console.trace 就行了
// console.assert(value[,message][,...]); //只有第一个参数为false时才会输出内容


// process 全局变量用于描述当前Node.js 进程状态的对象,提供了一个与操作系统的简单接口, 它提供了如下事件: exit(当进程准备退出时触发)、beforeExit、uncaughtException(默认的监视器是 打印堆栈跟踪信息并退出)、Signal事件(当进程接收到信号时就触发,例如 SIGINT,SIGUSR1等)
// 示例:
process.on('exit',function(code) {console.log('退出码为:', code);});

// process 还提供了很多有用的属性, 以便我们更好的控制系统的交互:
// process.stdout | stderr | stdin:
// process.argv: 它的第一个成员总是node,第二个成员是脚本文件名,其余成员是脚本文件的参数,因为执行时的命令总是: node xx.js paramA paramB ...
// process.execPath: 返回 node 命令的绝对路径
// ...

示例:

process.stdout.write("Hello World!" + "\n");
process.argv.forEach(function(val, index, array) {
 console.log(index + ': ' + val);
});
console.log(process.execPath);

process 还提供了很多有用的方法,以便我们更好的控制系统的交互:

示例:

console.log('当前目录: ' + process.cwd());
console.log('当前版本: ' + process.version);
// 输出内存使用情况
console.log(process.memoryUsage());

20. node.js 常用工具

util 是 node.js 的一个核心模块,提供常用函数的集合,用于弥补核心JavaScript 的功能 过于精简的不足

20.1 util.inherits

util.inherits 用于提供类的继承特性(原始的js基于prototype原型继承,不易控制),

示例

var util = require('util'); 
function Base() { ... };
function Sub() { ... };
util.inherits(Sub,Base); // 相当于 Sub 继承了 Base
var objSub=new Sub(); // objSub 可以使用 Base中定义的函数和变量

20.2 util.inspect

util.inspect(object,[showHidden],[depth],[colors]) 用于打印对象为字符串(原始的js打印不了对象内容),

示例:

var util = require('util'); 
function Person() { ... }
var obj = new Person(); 
console.log(util.inspect(obj)); 
console.log(util.inspect(obj, true)); 

20.3 其他示例

var util = require('util');
// 判断是否是数组
util.isArray([]); // true
util.isArray(new Array); // true
// 判断是否是正则表达式
util.isRegExp(/some regexp/); // true
util.isRegExp(new RegExp('another regexp')); // true
// 判断是否是日期
util.isDate(new Date()); // true
// 判断是否是error
util.isError(new Error()); // true

21. node.js 文件系统( fs模块 )

// 引入 fs 模块
var fs = require("fs");
// 异步读取
var callBackForRead=function(err, data) { ... };
fs.readFile('input.txt',callBackForRead);
// 同步读取
var data = fs.readFileSync('input.txt');
// 打开文件
var callBackForOpen=function(err, fd) { ... };
fs.open('input.txt', 'r+',callBackForOpen);
// 获取文件信息
var callBackForStat=function (err, stats) { ... };
fs.stat('input.txt',callBackForStat);
// 写入文件
var callBackForWrite=function(err)  { ... };
fs.writeFile('input.txt', '我是通过写入的文件内容!',  callBackForWrite);
// ... 还有很多,不再赘述 ...

22. node.js GET/POST请求

// 复习前面的内容,获取get请求内容
var http = require('http');
var url = require('url');
var util = require('util');

http.createServer(function(req, res){
  res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});
  res.end(util.inspect(url.parse(req.url, true)));
}).listen(3000);

http.createServer(function(req, res){
  res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});

  // 解析 url 参数
  var params = url.parse(req.url, true).query;
  res.write("网站名:" + params.name);
  res.write("\n");
  res.write("网站 URL:" + params.url);
  res.end(); 
}).listen(3000);

// 获取 POST 请求内容
var http = require('http');
var querystring = require('querystring');
var util = require('util');

http.createServer(function(req, res){
  // 定义了一个post变量,用于暂存请求体的信息
  var post = '';     

  // 通过req的data事件监听函数,每当接受到请求体的数据,就累加到post变量中
  req.on('data', function(chunk){    
      post += chunk;
  });

  // 在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回。
  req.on('end', function(){    
      post = querystring.parse(post);
      res.end(util.inspect(post));
  });
}).listen(3000);

23. node.js 工具模块

// (1) OS模块: 
var os = require("os")
// 方法: os.hostname(); ...
// (2) Path模块:
var path = require("path")
// 方法: path.dirname(p);path.basename(p[,ext])
// (3) Net模块:
var net = require("net")
// 方法: net.createServer([options][, connectionListener]) 创建一个 TCP 服务器
// (4) DNS模块
var dns = require("dns")
// 方法: dns.lookup(hostname);
// (5) Domain  模块
var domain = require("domain")
//  把处理多个不同的IO的操作作为一个组。注册事件和回调到domain,当发生一个错误事件或抛出一个错误时,domain对象会被通知,不会丢失上下文环境,也不导致程序错误立即推出,与process.on('uncaughtException')不同。// Domain 模块可分为隐式绑定和显式绑定:

24. node.js WEB模块( 就是http模块 )

// 使用 Node 创建 Web 服务器
var http = require('http');
var fs = require('fs');
var url = require('url');

// 创建服务器
http.createServer( function (request, response) {  
 // 解析请求,包括文件名
 var pathname = url.parse(request.url).pathname;
 
 // 输出请求的文件名
 console.log("Request for " + pathname + " received.");
 
 // 从文件系统中读取请求的文件内容
 fs.readFile(pathname.substr(1), function (err, data) {
    if (err) {
       console.log(err);
       // HTTP 状态码: 404 : NOT FOUND
       // Content Type: text/plain
       response.writeHead(404, {'Content-Type': 'text/html; charset=utf-8'});
    }else{           
       // HTTP 状态码: 200 : OK
       // Content Type: text/plain
       response.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});   
       
       // 响应文件内容
       response.write(data.toString());     
    }
    //  发送响应数据
    response.end();
 });   
}).listen(8081);

// 控制台会输出以下信息
console.log('Server running at http://127.0.0.1:8081/');


// 模拟客户端
var http = require('http');

// 用于请求的选项
var options = {
 host: 'localhost',
 port: '8081',
 path: '/index.htm'  
};

// 处理响应的回调函数
var callback = function(response){
 // 不断更新数据
 var body = '';
 response.on('data', function(data) {
    body += data;
 });
 
 response.on('end', function() {
    // 数据接收完成
    console.log(body);
 });
}
// 向服务端发送请求
var req = http.request(options, callback);
req.end();

25. node.js Express 框架

Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。

使用 Express 可以快速地搭建一个完整功能的网站。

安装,运行下面的命令会将 Express 框架安装在当前目录的 node_modules 目录中,node_modules 目录下会自动创建 express 目录

npm install express --save

同时安装其他模块

npm install body-parser --save
npm install cookie-parser --save
npm install multer --save

使用 express 搭建服务器

var express = require('express');
var app = express();

app.get('/', function (req, res) {
 res.send('Hello World');
})

var server = app.listen(8081, function () {

  var host = server.address().address
  var port = server.address().port

  console.log("应用实例,访问地址为 http://%s:%s", host, port)

})

26. Node.js 多进程

const child_process = require('child_process');
child_process.exec : 使用子进程执行命令
child_process.spawn 使用指定的命令行参数创建新进程
child_process.fork 是 spawn()的特殊形式. 与spawn方法不同的是,fork会在父进程与子进程之间,建立一个通信管道,用于进程之间的通信。

27. node.js JXcore打包

27.1 windows安装

直接下载安装

27.2 Linux 安装

https://github.com/jxcore/jxcore/blob/master/doc/INSTALLATION.md

curl https://raw.githubusercontent.com/jxcore/jxcore/master/tools/jx_install.sh | bash

27.3 显示版本号

jx --version ;#输出 v0.10.32

27.4 打包

jx package index.js index

打包完成后,会生成2个文件, index.jxp(中间文件)和index.jx(打包文件)

27.5 载入jx文件

jx index.jx 

28. node.js 连接 mysql

28.1 安装

npm install mysql

28.2 使用示例

var mysql = require('mysql');
var connection = mysql.createConnection({
  host : 'localhost',
  user : 'root',
  password : '123456',
  database : 'test'
});

connection.connect();

connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
  if (error) throw error;
  console.log('The solution is: ', results[0].solution);
});

29. node.js 连接 MongoDB

29.1 安装

npm install mongodb

29.2 示例

var MongoClient = require('mongodb').MongoClient;

二. 进阶

1. 基础的内容够用了...

上一篇下一篇

猜你喜欢

热点阅读