Node.js(更新中)

289 阅读3分钟

nodejs中文官网 nodejs.cn/

npm中文官网 www.npmjs.cn/

hello world

let http = require('http');

http.createServer(function (request, response) {
    response.end('hello world')
}).listen(8000)

console.log('running http://127.0.0.1:8000/')

也可以这样写

const http = require('http');

const app = http.createServer();

app.on('request', function (req, res) {
    res.end('hello world');
})

app.listen(8000, function (){
    console.log('running http://127.0.0.1:8000/')
})

也可以使用箭头函数

let http = require('http');

http.createServer((request, response) => {
    response.end('hello world')
}).listen(8000)

console.log('running http://127.0.0.1:8000/')

变量导入导出

导出第一种方式

config.js

const config = {
    host: '127.0.0.1',
    port: 10580
}

exports.config = config;

server.js

let config = require('./config.js').config;

let http = require('http');

http.createServer(function (request, response) {
    response.end('hello world\n')
}).listen(config.port, config.host)

console.log(`running listen http://${config.host}:${config.port}/`)
导出第二种方式

server.js

const data = require('./s2.js')
console.log(data.name)

let sum = data.add(3,5)
console.log(sum)

s2.js

function add(a, b) {
    return a + b;
}

var name = "wanghaha";

module.exports = {
    name,
    add
}

// 也可以这样写全
// module.exports = {
//     name: name,
//     add: add
// }

读取文件

const fs = require('fs');

fs.readFile('./package.json', 'utf-8', function (err, data) {
    // 如果读取成功err会等于null
    console.log(err)

    console.log(data)
})


fs.readFile('./package.json', function (err, data) {
    // 如果读取成功err会等于null
    console.log(err)

    console.log(data)
    // 如果上面没有指定编码,那么输出的是Buffer, toString()一下就好了
    console.log(data.toString())
})


写文件

let fs = require('fs');

// 文件不存在会自动创建
fs.writeFile('test.txt', '我是王哈哈', function (err){
    if (err) {
        console.log('写入失败')
    } else {
        console.log('写入成功')
    }
})

读取html文件

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>hello world</h1>
    <img src="https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=2465576539,2396168373&fm=11&gp=0.jpg" alt="">
</body>
</html>

server.js

let http = require('http');
let fs = require('fs');

http.createServer(function (request, response) {
    fs.readFile('./index.html', function (err, data) {
        if (err) {
            console.error(err)
            response.end('server error')
        } else {
            response.end(data)
        }
    })
}).listen(8000)

console.log('running http://127.0.0.1:8000/')

路径拼接

为了适应不同的操作系统,比如windowslinux, mac上的路径分割符不一样,你可以在代码里面使用这个.join方法拼接会自动的适应操作系统

let path = require('path');

let dir = path.join('usr', 'local', 'mysql')

// usr\local\mysql
console.log(dir)

常用的两个全局变量

// 当前文件(绝对路径)的目录
console.log(__dirname)

// 当前文件(绝对路径)的文件名
console.log(__filename)

使用路径拼接读取文件

let path = require('path');
let fs = require('fs');

fs.readFile(path.join(__dirname, 'test.txt'), 'utf-8', function (err, data) {
    if (err) {
        console.log('读取文件失败')
    } else {
        console.log(data)
    }
})

根据不同的url响应不同的内容

const http = require('http');

const app = http.createServer();

app.on('request', function (req, res) {
    // 解决中文输出乱码
    res.setHeader('Content-Type', 'text/html;charset=utf-8')

    // 根据请求的url响应不同的内容
    switch (req.url) {
        case '/':
            res.end('首页');
            break;
        case '/about':
            res.end('关于页');
            break;
        case '/login':
            res.end('登录页');
            break;
        default:
            res.end('其他页');
            break;
    }
})

app.listen(8000, function (){
    console.log('running http://127.0.0.1:8000/')
})


获取GET请求参数

const http = require('http');
const url = require('url');

const app = http.createServer();

app.on('request', function (req, res) {
    // 请求的http方法
    console.log(req.method)

    // 请求的url
    console.log(req.url)

    // 拿到GET请求参数
    console.log(url.parse(req.url, true).query)

    // 解析GET请求参数
    let name = url.parse(req.url, true).query.name
    let age = url.parse(req.url, true).query.age
    res.end(`name is ${name}, age is ${age}`)
})

app.listen(8000, function (){
    console.log('running http://127.0.0.1:8000/')
})

nrm使用, npm源管理

我们使用npm默认是国外的源去下载速度会很慢, nrm是阿里巴巴维一个工具,使用它可以让我们选择npm安装的源地址

全局安装nrm

npm install nrm -g

查询当前使用的源

nrm ls

切换到指定的源

nrm use taobao


第三方包nodemon

当文件保存时会自动重新运行代码,方便开发调试

安装

npm install nodemon

使用

nodemon nodejs代码文件

模板引擎ejs

ejs官网

安装

npm install ejs

server.js

let ejs = require('ejs');
let http = require('http');
let fs = require('fs');

// 必须指定编码
let template = fs.readFileSync('./test.ejs', 'utf-8');

http.createServer(function (req, res) {
    let data = ejs.render(template, {
        title: 'test ejs',
        content: 'content hello world...'
    })
    res.setHeader('Content-Type', 'text/html')
    res.end(data);
}).listen(8000)

console.log('running http://127.0.0.1:8000/')

test.ejs

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title><%= title %></title>
</head>
<body>
    <%- content %>
</body>
</html>

Promise

改造多层回调

const fs = require('fs');
const path = require('path');

let p = new Promise(function (resolve, reject) {
    // resolve 成功执行的代码
    // reject 失败执行的代码
    fs.readFile(path.join(__dirname, 'test.txt'), 'utf-8', function (err, data) {
        if (err) {
            reject(err)
        } else {
            resolve(data)
        }
    })
}).then(function (data) {
    console.log(data)
}).catch(function (err) {
    console.log(err)
})

ES6语法

const fs = require('fs');
const path = require('path');

let p = new Promise((resolve, reject) => {
    // resolve 成功执行的代码
    // reject 失败执行的代码
    fs.readFile(path.join(__dirname, 'test.txt'), 'utf-8', (err, data) => {
        if (err) {
            reject(err)
        } else {
            resolve(data)
        }
    })
}).then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})

Promise同步执行

const fs = require('fs');

function readFile(filepath) {
    return new Promise((resolve, reject) => {
        fs.readFile(filepath, 'utf-8', (err, data) => {
            if (err) {
                reject(err)
            } else {
                resolve(data)
            }
        })
    })
}

readFile('test.ejs').then(data => {
    console.log(data);
    return readFile('server.js');
}).then(data=>{
    console.log(data);
    return readFile('test.txt')
}).then(data=>{
    console.log(data)
})