Nodejs启程从记录开始

序言

Nodejs 启程啦,做了些纸上的笔记,一开始是为了加深理解,隔天再翻看下当时温习。不经觉得过些时间或许就不会到本本上找了,固然还是选择在这里记录下比较好,尽管速度会慢下来的说。实际上目前也仅仅只是跟着语法和基础学,具体要怎么实践好还真是一点头绪都木有呢!

[ TOP ]

1. 全局对象与全局变量

Global,JavaScript 中的一个特殊对象,旗下所有属性可在程序中的任意位置接受访问,即全局变量。global 为全局变量的宿主,作为全局变量需满足以下条件:

  • 模块文件最外层定义的变量
  • 作为全局对象的属性
  • 隐私定义的变量(未定义直接赋值的变量)
全局变量作用
__filename输出当前文件/模块文件所在位置的据对路径
__dirname输出当前文件/模块文件说在位置的目录
setTimeout(cb, ms)在指定时间毫秒(ms)数后执行一次函数(cb)
clearTimeout(t)停止 setTimeout() 创建的定时器(t)
setInterval(cb, ms)每间隔指定时间毫秒(ms)数后执行函数(cb)
clearInterval(t)停止 setInterval() 创建的定时器(t)
console控制台字符输出
process描述当前 Node.js 进程状态的对象;方便与控制系统的交互

2. 常用工具

util 提供常用函数,作用于弥补 JavaScript 的功能过于精简的不足。(对 JavaScript 并没有一个很熟悉的概念,所以教程上这么说我个人自然觉得还是挺懵逼的)

工具函数作用
inherits(constructor, superConstructor)实现对象间原型继承的函数(仅原型中定义的函数)
inspect(object,[showHidden],[depth,[colors]])将任意对象转换为字符串
isArray(object)判断对象是否为数组(集合不属于数组)
isRegExp(objecy)判断对象是否为正则表达式
isDate(object)判断对象是否为日期(Date() without ‘new’ returns a String)
isError(object)判断是否为错误对象

3. 创建 Web 服务器

Web 服务器指的是驻留与因特网上某种类型计算机的程序,Web 服务器的基本功能就是提供 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;

    // 从文件系统总读取请求的文件内容
    fs.readFile(pathname.substr(1), function(err, data){
        if(err){
            console.log(err);
            response.writeHead(404,{'Content-Type': 'text/html'});
        }else{
            response.writeHead(200,{'Content-Type': 'text/html'});
            response.write(data.toString());    
        }

        // 发送文件内容
        response.end();
    });
}).listen(8081);

4. Express 框架(重点)

  • 可设置中间件来响应 HTTP 请求
  • 定义路由表用于执行不同的 HTPP 请求动作
  • 通过向模板传递参数来动态渲染 HTML 页面

这里主要抓点网络请求 get/post 的实现以及文件的上传,故取个综和性的栗子(静态环境下的上传文件表单内容):

<html>
<body>
<title>表单文件上传:</title>
<h3>选择一个文件上传:</h3>
<form action="/file_upload" method="POST" enctype="multipart/form-data">
    <input type="file" name="image" size="50"><br>
    <input type="submit" value="上传文件">
</form>
</body>
</html>
var express = require('express');
var app = express();
var fs = require('fs');
var bodyParser = require('body-parser');
var multer = require('multer');
var cookieParser = require('cookie-parser');

app.use(express.static('public'));
app.use(bodyParser.urlencoded({extended: false}));
app.use(multer({dest:'/tmp/'}).array('image'));
app.use(cookieParser());

app.get('/inputFile.htm', function(req,res){
    res.sendFile(__dirname + "/" + "inputFile.htm");
});

app.post('/file_upload', function(req, res){
    console.log(req.files[0]);
    console.log("Cookies: ", req.cookies);

    var des_file = __dirname + "/" + req.files[0].originalname;
    fs.readFile(req.files[0].path, function(err, data){
    fs.writeFile(des_file, data, function(err){
        if(err){
        console.log(err);
        }else{
        response = {
            message:'File upload successfully',
            filename:req.files[0].originalname  
        };
        }
        console.log(response);
        res.end(JSON.stringify(response));
    });
    });
});

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

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

5. REST 架构

方法作用
GET用户获取数据
PUT用于更新或添加数据
DELETE用户删除数据
POST用于添加数据

5.1 RESTful 基于 REST 架构的 WebService

{
    "user1" : {
        "name" : "mahesh",
        "password" : "password1",
        "profession" : "teacher",
        "id": 1
    },
    "user2" : {
        "name" : "suresh",
        "password" : "password2",
        "profession" : "librarian",
        "id": 2
        },
    "user3" : {
        "name" : "ramesh",
        "password" : "password3",
        "profession" : "clerk",
        "id": 3
    }
}
URIHTTP 方法发送内容结果
listUsersGET显示所有用户列表
addUserPOSTJSON 字符串添加新用户
deleteUser/:idDELETEJSON 字符串删除用户
:idGET显示用户详细信息
var express = require('express');
var app = express();
var fs = require('fs');

// 查看用户列表
app.get('/listUsers', function(req, res){
    fs.readFile(__dirname + "/" + "users.json", 'utf8', function(err, data){
    if(err){
        console.log(err);
    } else {
        console.log(data);
        res.end(data);
    }
    });
});

// 新增用户数据
var user = {
   "user4" : {
      "name" : "gzejia",
      "password" : "pwd",
      "profession" : "student",
      "id": 4
   }
}

app.get('/addUser', function (req, res) {
   fs.readFile(__dirname + "/" + "users.json", 'utf8', function (err, data) {
       data = JSON.parse(data);
       data["user4"] = user["user4"];
       console.log(data);
       res.end(JSON.stringify(data));
   });
});

// 查看指定用户信息
app.get('/:id', function(req, res){
    fs.readFile(__dirname + "/" + "users.json", 'utf8', function(err, data){
    data = JSON.parse(data);
    var user = data["user" + req.params.id];
    console.log(user);
    res.end(JSON.stringify(user));
    });
});

//  删除指定用户
app.get('/deleteUser/:id', function(req, res){
    fs.readFile(__dirname + "/" + "users.json", 'utf8', function(err, data){
    data = JSON.parse(data);
    delete data["users" + req.params.id];
    console.log(data);
    res.end(JSON.stringify(data));
    });
});

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

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

6. 多进程 child_process

方法作用使用语法
exec使用子进程执行命令,缓存子进程的输出吗并将子进程的输出以回调函数参数的形式返回child_process.exec(command[, options], callback)
spawn使用指定的命令行参数创建新进程child_process.spawn(command[, args][, options])
forkspawn() 的特殊形式,用于在子进程中运行的模块。与之不同的是 fork 会在父进程与子进程之间建立一个通信管道,用于进程之间的通信child_process.fork(modulePath[, args][, options])

7. JXcore 支持多线程的 Node.js 发行版

8. 对接 MySQL 数据库管理

8.1 数据库的连接

var mysql = require('mysql');
var connection = mysql.createConnection({
    host : 'localhost',// 主机地址
    user : 'root',// 用户名
    password : '123456',// 密码
    database : 'test'// 数据库名
});

connection.connect();

// 各种数据操作

connection.end();

8.2 数据库连接池

var mysql = require('mysql');
var pool=mysql.createPool({
  host: 'localhost',
  user: 'root',
  password: '123456',
  port: '3306',
  database: 'test,
  connectionLimit: 10 // 最大连接数,默认为10
});

pool.getConnection(function(error, connection){

    // 各种数据操作

});

// 关闭所有数据连接(可不关闭)
pool.end();

8.3 数据操作

操作名称具体实现
查询connection.query(‘selectSql’, function(error, result){});
插入connection.query(‘addSql’, ‘addParams’, function(error, result){});
更新connection.query(‘updateSql’, ‘updateParams’, function(error, result){});
删除connection.query(‘delSql’, function(error, result){});

(感谢菜鸟平台)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值