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. TCP三次握手四次挥手最通俗理解

    工作过程TCP标志位:TCP共有6个标志位,分别是: SYN(synchronous),建立联机.ACK(acknowledgement),确认.PSH(push),传输.FIN(finish),结束 ...

  2. 剑指offer——python【第59题】按之子形顺序打印二叉树

    题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 解题思路 这道题其实是分层打印二叉树的进阶版 ...

  3. servlet数据库验证登录

    servlet数据库验证登录 一.将数据库连接和验证封装为一个单独的类 import java.sql.*; public class SQLtest { // JDBC 驱动名及数据库 URL st ...

  4. [ipsec][crypto] 在IPSec ESP使用AES-GCM加密时的IV

    IV IV是指初始化向量. 在我们当前讨论的场景中: 在IPSec ESP使用AES-GCM加密 IV有两个含义: 1. ESP报文封装时的IV,RFC中称为 AES-GCM IV +-+-+-+-+ ...

  5. python中的向上取整向下取整以及四舍五入的方法

    import math #向上取整print "math.ceil---"print "math.ceil(2.3) => ", math.ceil(2. ...

  6. js手机浏览器浏览WebApp弹出的键盘遮盖住文本框的解决办法

    if(window.navigator.userAgent.indexOf('Android') > -1 || window.navigator.userAgent.indexOf('Adr' ...

  7. springboot+spring security +oauth2.0 demo搭建(password模式)(认证授权端与资源服务端分离的形式)

    项目security_simple(认证授权项目) 1.新建springboot项目 这儿选择springboot版本我选择的是2.0.6 点击finish后完成项目的创建 2.引入maven依赖  ...

  8. windows下安装Mongodb的方法

    参考:https://blog.csdn.net/heshushun/article/details/77776706

  9. 2019/4/22 kmp模板

    题目连接:传送门!!! 这里是从头到尾彻底理解KMP的一篇博客,写的非常好 :https://blog.csdn.net/v_JULY_v/article/details/7041827 题意:输入多 ...

  10. 使用springmvc进行文件的上传和下载

    文件的上传 SpringMVC支持文件上传组件,commons-fileupload,commons-fileupload依赖commons-io组件 配置步骤说明 第一步:导入包 commons-f ...