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/')
路径拼接
为了适应不同的操作系统,比如windows和linux, 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
安装
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)
})