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基础快速上手的更多相关文章

  1. 【技术文章】《快速上手nodejs》

    本文地址:http://www.cnblogs.com/aiweixiao/p/8294814.html 原文地址: 扫码关注微信公众号 1.写在前面   nodejs快速上手   nodejs使ja ...

  2. React:快速上手(1)——基础知识

    React:快速上手(1)——基础知识 React(有时叫React.js或ReactJS)是一个为数据提供渲染为HTML视图的开源JavaScript库,用于构建用户界面. JSX.元素及渲染 1. ...

  3. 三分钟快速上手TensorFlow 2.0 (上)——前置基础、模型建立与可视化

    本文学习笔记参照来源:https://tf.wiki/zh/basic/basic.html 学习笔记类似提纲,具体细节参照上文链接 一些前置的基础 随机数 tf.random uniform(sha ...

  4. 《Python游戏编程快速上手》|百度网盘免费下载|Python基础编程

    <Python游戏编程快速上手>|百度网盘免费下载| 提取码:luy6 Python是一种高级程序设计语言,因其简洁.易读及可扩展性日渐成为程序设计领域备受推崇的语言. 本书通过编写一个个 ...

  5. CSS快速入门基础篇,让你快速上手(附带代码案例)

    1.什么是CSS 学习思路 CSS是什么 怎么去用CSS(快速上手) CSS选择器(难点也是重点) 网页美化(文字,阴影,超链接,列表,渐变等) 盒子模型 浮动 定位 网页动画(特效效果) 项目格式: ...

  6. 简明易懂,将细节隐藏,面向新手树立web开发概念——学完Java基础语法,超快速上手springboot+mybatiJavaWeb开发

    简明易懂,将细节隐藏,面向新手树立web开发概念 --学完Java基础语法,超快速上手JavaWeb开发 Web本质(先忽视各种协议) Web应用可以理解为浏览器和服务器之间的交互. 我们可以看一个简 ...

  7. 三分钟快速上手TensorFlow 2.0 (下)——模型的部署 、大规模训练、加速

    前文:三分钟快速上手TensorFlow 2.0 (中)——常用模块和模型的部署 TensorFlow 模型导出 使用 SavedModel 完整导出模型 不仅包含参数的权值,还包含计算的流程(即计算 ...

  8. 【Python五篇慢慢弹】快速上手学python

    快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...

  9. [译]:Xamarin.Android开发入门——Hello,Android Multiscreen快速上手

    原文链接:Hello, Android Multiscreen Quickstart. 译文链接:Hello,Android Multiscreen快速上手 本部分介绍利用Xamarin.Androi ...

随机推荐

  1. PAT甲级1034 Head of a Gang【bfs】

    题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805456881434624 题意: 给定n条记录(注意不是n个人的 ...

  2. PHP算法学习(2) 轮训加权算法

    2019年1月8日16:10:51 svn地址:svn://gitee.com/zxadmin/live_z    代码在code里面 <?php /* * 加权轮训算法 * * * $arr ...

  3. github=>git=>composer Packages 使用教程

    2018年12月17日14:32:05 因为要做搜索,所以需要用分词工具php的分词不借助的第三方的真的很少, 目前选择的是 http://www.phpbone.com/phpanalysis/ 但 ...

  4. ldap/sldap

    给新建的账户赋权限也是通过修改配置文件/etc/openldap/slapd.conf来实现,具体的增加的内容如下: 如上面示例中就定义了两个用户,一个是只读用户cn=bbs,dc=361way,dc ...

  5. API认证&SDK&RESTful

    python API的安全认证   我们根据pid加客户端的时间戳进行加密md5(pid|时间戳)得到的单向加密串,与时间戳,或者其它字段的串的url给服务端. 服务端接收到请求的url进行分析 客户 ...

  6. centos 7安装mysql 执行./scripts/mysql_install_db --user=mysql 报错 FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql_install_db: Data::Dumper

    [root@localhost mysql]# ./scripts/mysql_install_db  --user=mysql FATAL ERROR: please install the fol ...

  7. 3n+1猜想——模拟

    package dxb.com; import java.util.Scanner; public class caixiang { public static void main(String[] ...

  8. org.springframework.boot.web.server.WebServerException: Unable to create tempDir. java.io.tmpdir is set to C:\Users\ADMINI~1\AppData\Local\Temp\2\

    问题原因:springboot创建临时文件找不到对应的目录 解决办法:1. 重新指定临时文件位置  java -Djava.io.tempdir=D:/tmpdir -jar -my_project. ...

  9. python练习题-day18

    1.匹配一行文字中的所有开头的字母内容 import re s="i love you not because of who you are, but because of who i am ...

  10. opencart分类筛选逻辑修改为并且条件

    opencart分类筛选模式默认是或的逻辑,满足条件1或条件2都展现出来,如果想要改成既满足条件1又满足条件2要怎么改呢?有一个插件可以实现,FixFilter OC2x,可以修改默认的筛选条件 1. ...