Node.js 接口如此简单

演讲者:kyle

日期:2018.05.18

Node.js简介

采用google Chrome浏览器的V8引擎,以及Linux上的一个非阻塞事件驱动IO框架,由C++语言编写的,本质上是一个javascript运行环境

提到JS,大家就能够想到浏览器内的各种交互组件、异步请求等等,他们依靠浏览器的javascript引擎来解析页面的JS代码,node.js这个运行环境不仅仅解析JS代码,并且没有浏览器端的各种安全限制,还提供各种系统级别的API,比如:文件读写、进程的管理、网络通信等等。

为什么要学习Node.js

Node.js 的特征

原生Node.js接口

let http = require('http')

http.createServer((request, response) => {
    // 发送 HTTP 头部 
    // HTTP 状态值: 200 : OK
    // 内容类型: text/plain
    response.writeHead(200, {'Content-Type': 'text/plain'});
    // 发送响应数据 "Hello World"
    response.end('Hello Soyoung')
}).listen(3000)

推荐 Express

let express = require('express')
let app = express()

app.get('/api/url', (req, res) => {
   res.send('Hello Soyoung')
})

app.listen(3000, () => {})

req 主要参数

  • req.baseUrl:获取路由当前安装的URL路径
  • req.body / req.cookies:获得「请求主体」/ Cookies
  • req.hostname / req.ip:获取主机名和IP地址
  • req.originalUrl:获取原始请求URL
  • req.params:获取路由的parameters
  • req.path:获取请求路径
  • req.query:获取URL的查询参数串
  • req.route:获取当前匹配的路由

res 主要参数

  • res.cookie(name,value [,option]):设置Cookie
  • res.render(view,[locals],callback):渲染一个view,同时向callback传递渲染后的字符串,如果在渲染过程中有错误发生next(err)将会被自动调用。callback将会被传入一个可能发生的错误以及渲染后的页面,这样就不会自动输出了。
  • res.send():传送HTTP响应
  • res.sendFile(path [,options] [,fn]):传送指定路径的文件 -会自动根据文件extension设定Content-Type

解决跨域问题

let cors = require('cors')
//设置跨域访问
app.use(cors({
  origin: [
    'http://www.soyoung.com',
    'http://www.sy.soyoung.com'
  ],
  credentials: true  // 是否带cookie
}))

https://github.com/expressjs/cors

文件上传

let multer  = require('multer');
let upload = multer({ dest: 'tmp/' })
app.post(path, upload, function (req, res) {
  // req.files[0] // 上传的文件信息
});

https://github.com/expressjs/multer

文件保存

let fs = require("fs")
fs.readFile( req.files[0].path, (err, data) => {
    fs.writeFile('demo.png', data, err => {
        if ( err ) {
            console.log( err )
        } else {
            res.end({
                message:'文件上传成功',
                filename:req.files[0].originalname
            })
        }
    });
});

存储数据

let mysql = require('mysql')
// 配置数据库
let connection = mysql.createConnection({
  host     : 'localhost', // 数据库地址
  user     : 'root', // 数据库用户名
  password : '123456', // 数据库密码
  database : 'soyoung', // 数据库名
  port: '3306', // 数据库端口
  multipleStatements: true // 执行多条sql
})
connection.connect()
let sql = 'SELECT * FROM biji_banners WHERE id = ?';
let sqlParams = [
    2
  ];
connection.query(sql, sqlParams, (error, results) => {
  if (error) {
    throw error
  }
  console.log(results[0])
})

增删改查

INSERT INTO 表名(字段名) VALUES(字段值)
DELETE FROM 表明 WHERE 条件
UPDATE 表名 SET 字段名 = 字段值 WHERE 条件
SELECT * FROM 表明 WHERE 条件

https://github.com/mysqljs/mysql

CentOS web环境部署如何上手

部署Node.js环境

部署MySQL环境

部署Nginx环境

服务器:CentOS 6.8

IP:121.42.37.43

用户名:root

密码:Zhuangkai123

数据库:MySQL

IP:121.42.37.43

用户名:root

密码:Zhuangkai321

FTP

IP:121.42.37.43

用户名:ftp_soyoung

密码:soyoung616

谢谢各位

THANKS