nodejs基础快速上手
node 快速了解
hello node.js
console.log("hello Node.js");
let http = require("http");
// request 请求对象 response 响应的对象
let server = http.createServer(function (request, response) {
// 这是一个写入流 200 :传一个状态码 Content-Type: 传一个什么样的内容给浏览器
response.writeHead(200, {"Content-Type": "text/html; charset=utf-8"});
// 会出现两次访问
if(request.url !== "/favicon.ico") {
// 清除第二次访问
console.log("访问");
response.write("hell node.js");
// 要加上这个, 不然会一直转
response.end("结束");
}
});
// 监听 8000 端口
server.listen(8000, "127.0.0.1");
console.log("Server running at http://127.0.0.1:8000/");
模块
// moudule.app.js
var counter = function (arr) {
return "there are " + arr.length + " el";
}
var adder = function (a, b) {
return `the sum of the 2 number is ${a+b}`;
}
var PI = 3.14;
// module.exports.counter = counter;
// module.exports.adder = adder;
// module.exports.PI = PI;
module.exports = {
counter,
adder,
PI
}
// module.js
// 模块全部导入
var stuff = require('./module.app')
// 只导入部分模块
var pi = require("./module.app").PI;
var { adder} = require("./module.app")
console.log(stuff.counter([23, 3, 5]));
console.log(stuff.adder(23, 3));
console.log(adder(23, 9));
console.log(stuff.PI);
console.log(pi);
事件
let events = require("events");
// 新增事件对象
let myEmitter = new events.EventEmitter();
// 绑定事件监听函数 someEvent: 事件名称
myEmitter.on("someEvent", function (message) {
console.log(message);
})
// 手动触发事件
myEmitter.emit("someEvent", "手动触发事件");
例子, 用 ES6 的语法也可以
let events = require("events");
// 是一个工具库
let util = require("util");
function Person(name) {
this.name = name;
}
// util.inherits(子类, 父类); 实现子类可以继承父类
util.inherits(Person, events.EventEmitter);
let xiaoming = new Person("xiaoming");
let lucy = new Person("lucy");
// // 用 ES6 的语法
// class Person extends events.EventEmitter {
// constructor (name) {
// super();
// this.name = name;
// }
// }
let person = [xiaoming, lucy];
person.forEach(function (person) {
person.on("say",(message) => {
console.log(person.name + " say: " + message);
})
});
xiaoming.emit("say", "hi");
lucy.emit("say","hello");
输出为
xiaoming say: hi
lucy say: hello
读取文件fs
let fs = require("fs");
// 同步读文件
let readSyncData = fs.readFileSync("readMe.txt", "utf-8");
// 只要是异步操作都要有回调函数
fs.readFile("readMe.txt", "utf-8", (err, data) => {
console.log("异步读文件\n\t我读出的数据是:", data);
})
let writeData = "我fs.js在给你writeMe.txt写数据。。。"
fs.writeFile("./writeMe.txt", writeData, (err) => {
console.log("异步写文件完成");
console.log(err);
})
console.log("同步读文件, 读出的内容是",readSyncData);
// node 执行javascript代码是单线程的, 是一句一句的执行代码,但当
// 执行到 有异步操作的时候,主线程就把他挂载上,之后就继续往下执行代码,
// 具体哪个时候执行也不清楚, 当主线程执行完了就可以再来执行这个异步的代码
操作目录和文件
同步的只需在后面写 Sync, 再去掉回调函数
// 1. 创建/删除 目录
// fs.mkdir("dirFS", (err) => {});
// fs.rmdir("dirFs", (err) => {});
// // 2. 创建/删除 文件
// fs.write()
// fs.unlink("writeMe.txt", (err) => {});
请求/响应数据
请求、响应 JSON , 在发送 json 时, 要用
JSON.stringify(jsonData)
把json数据转化为字符串,这样才能传输, 在客户端要用josn 时, 用 json 的放JSON.parse(str)
把字符串转化为对象// 请求 json数据 并解析
let http = require("http");
// request 请求对象 response 响应的对象
let server = http.createServer(function (request, response) {
// 这是一个写入流 200 :传一个状态码 Content-Type: 传一个什么样的内容给浏览器
response.writeHead(200, {"Content-Type": "application/json"});
let myObj = {
name: "zhfei",
job: "programmer",
age: 22
}
// 要把 JSON 数据序列化为字符串才能在网络中传输
// 在客户端反序列化 JSON.parse()
response.end(JSON.stringify(myObj));
// 监听 端口
});
server.listen(3000, "127.0.0.1");
console.log("Server running at http://127.0.0.1:3000/");
请求/响应 HTML
注意, Conten-type: 的值要为 text/html , 不然浏览器不会解析
// 请求 HTML 数据 并解析
let http = require("http");
let fs = require('fs');
let myReadStream; // 写在这里不对,浏览器刷新什么都没有了
// myReadStream = fs.createReadStream(__dirname + "/index.html", "utf8");
// request 请求对象 response 响应的对象
let server = http.createServer(function (request, response) {
// 如果是 text/plain 浏览器就不会解析HTML了
response.writeHead(200, {"Content-Type": "text/html"}); // 把 HTML 写入响应
myReadStream = fs.createReadStream(__dirname + "/index.html", "utf8");
myReadStream.pipe(response) });
server.listen(3000, "127.0.0.1");
console.log("Server running at http://127.0.0.1:3000/");
nodejs基础快速上手的更多相关文章
- 【技术文章】《快速上手nodejs》
本文地址:http://www.cnblogs.com/aiweixiao/p/8294814.html 原文地址: 扫码关注微信公众号 1.写在前面 nodejs快速上手 nodejs使ja ...
- React:快速上手(1)——基础知识
React:快速上手(1)——基础知识 React(有时叫React.js或ReactJS)是一个为数据提供渲染为HTML视图的开源JavaScript库,用于构建用户界面. JSX.元素及渲染 1. ...
- 三分钟快速上手TensorFlow 2.0 (上)——前置基础、模型建立与可视化
本文学习笔记参照来源:https://tf.wiki/zh/basic/basic.html 学习笔记类似提纲,具体细节参照上文链接 一些前置的基础 随机数 tf.random uniform(sha ...
- 《Python游戏编程快速上手》|百度网盘免费下载|Python基础编程
<Python游戏编程快速上手>|百度网盘免费下载| 提取码:luy6 Python是一种高级程序设计语言,因其简洁.易读及可扩展性日渐成为程序设计领域备受推崇的语言. 本书通过编写一个个 ...
- CSS快速入门基础篇,让你快速上手(附带代码案例)
1.什么是CSS 学习思路 CSS是什么 怎么去用CSS(快速上手) CSS选择器(难点也是重点) 网页美化(文字,阴影,超链接,列表,渐变等) 盒子模型 浮动 定位 网页动画(特效效果) 项目格式: ...
- 简明易懂,将细节隐藏,面向新手树立web开发概念——学完Java基础语法,超快速上手springboot+mybatiJavaWeb开发
简明易懂,将细节隐藏,面向新手树立web开发概念 --学完Java基础语法,超快速上手JavaWeb开发 Web本质(先忽视各种协议) Web应用可以理解为浏览器和服务器之间的交互. 我们可以看一个简 ...
- 三分钟快速上手TensorFlow 2.0 (下)——模型的部署 、大规模训练、加速
前文:三分钟快速上手TensorFlow 2.0 (中)——常用模块和模型的部署 TensorFlow 模型导出 使用 SavedModel 完整导出模型 不仅包含参数的权值,还包含计算的流程(即计算 ...
- 【Python五篇慢慢弹】快速上手学python
快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...
- [译]:Xamarin.Android开发入门——Hello,Android Multiscreen快速上手
原文链接:Hello, Android Multiscreen Quickstart. 译文链接:Hello,Android Multiscreen快速上手 本部分介绍利用Xamarin.Androi ...
随机推荐
- Linux:ftp服务本地用户,虚拟用户配置
本地用户 1. 修改ftp配置文件, anonymous_enable=NO 默认为YES,修改为NO,禁止匿名访问, 监听端口,可以根据自己的需求修改,为了安全起见自定义为好 2. /etc/ ...
- JSON.stringify 语法实例讲解+easyui data-options属性+expires【申明:来源于网络】
JSON.stringify 语法实例讲解+easyui data-options属性+expires[申明:来源于网络] JSON.stringify 语法实例讲解:http://www.jb51. ...
- 2019.4.1 JMeter中文乱码解决方案
1)添加一个HTTP信息头管理器:添加Accept:application/xml;application/json;charset=utf-8 2)参数为中文:在HTTP请求时设置编码格式为utf- ...
- iOS HTML特殊字符转译
something about you Bye Bye è; un saluto 我使用NSXMLParser,它是顺利,直到它找到èHTML实体.它要求foundCharacters:为“再见” ...
- 为什么局部变量必须以final修饰(或者有final实效:java8)才可以在内部类中使用?
为什么局部变量必须以final修饰(或者有final实效:java8)才可以在内部类中使用? public class Ace { public static void main(String[] a ...
- 队列->队列的表示和实现
文字描述 队列是和栈相反,队列是一种先进先出(first in first out,缩写FIFO)的线性表,它只允许在表的一端进行插入,而在另一端进行删除.和生活中的排队相似,最早进入队列的元素最早离 ...
- Fiddler_抓包应用_01
1. 手机抓包配置 1.1. Fiddler配置 Tools->Options 抓取https的请求: 查看Fiddler端口 1.2. 获取Fiddler 所在IP (1) 可通过fiddle ...
- jeecg自定义datagrid查询
为什么要写这篇文章? 我们了解,使用 jeecg 提供的 CriteriaQuery 查询方式,确实能满足绝大数的需求,但是往往有那么个比较复杂的情况,需要我们直接去写 sql,比如多表查询呀等等等等 ...
- filter与map函数
·filter()函数filter()函数包括两个参数,分别是function和list.该函数根据function参数返回的结果是否为真来过滤list参数中的项,最后返回一个新列表,如下例所示:&g ...
- RCNN的流程
步骤一: 找到一个CNN分类模型 步骤二: 对于这个模型修改最后的分类层,为21类,去掉最后一个全连接层 步骤三: 根据选择性搜索提取图像的候选区域(框) 对于候选框修改大小以适应CNN输入,然后得出 ...