nodejs学习整理
Nodejs使用方法
exports 导出
module.exports 导出
/dog.jsvar dog={color:'red',kind:'哈士奇'eat:function(){console.log('eat meet');} } exports=module.exports=dog; - 导入var dog = require('./dog.js')dog.eat()
读取文件
nodejs---readFile函数
var http = require('http') var fs = require('fs') var server = http.createServer() var wwwDir = 'D:/Movie/www' server.on('request', function (req, res) {var url = req.urlvar filePath = '/index.html'if (url !== '/') {filePath = url}fs.readFile(wwwDir + filePath, function (err, data) {if (err) {return res.end('404 Not Found.')}res.end(data)}) }) // 3. 绑定端口号,启动服务 server.listen(3000, function () {console.log('running...') })
nodejs -- writeFile函数
var fs = require('fs'); // 引入fs模块// 写入文件内容(如果文件不存在会创建一个文件) // 传递了追加参数 { 'flag': 'a' } fs.writeFile('./try4.txt', 'HelloWorld', { 'flag': 'a' }, function(err) {if (err) {throw err;}console.log('Hello.');// 写入成功后读取测试fs.readFile('./try4.txt', 'utf-8', function(err, data) {if (err) {throw err;}console.log(data);}); });
Express
1. instal art-template模板
npm install --save art-template npm install --save express-art-template
2.Example
var express = require('express'); var app = express(); //参数一:是以什么文件的后缀名的文件,进行渲染 app.engine('html', require('express-art-template')); app.set('views',express.static(path.join('__dirname','./views/')))//修改express默认的目录 //在express-art-template的模板中和nodejs协商默认文件夹为views,渲染这个文件夹下的资源可以不写文件夹的路径,可以直接写要渲染的文件,也可以自定义默认文件,指令如下: app.set('view options', {debug: process.env.NODE_ENV !== 'production' }); app.get('/', function (req, res) {//渲染文件的方法:renderres.render('index.html', {user: {name: 'aui',tags: ['art', 'template', 'nodejs'] } }); });
3.获取?后面的数据
app.get('/pinglun',function(req,res){dataBuff.unshift(req.query);res.redirect('/'); })
2. express中获取post数据
在express中无法获取post请求的数据,需要借助第三方插件
npm install --save body-parser
配置:
var express = require('express') //0.引包 var bodyParser = require('body-parser') var app = express() //配置body-parser //只要加这个配置,则在req请求对象上多出来一个属性:body app.use(bodyParser.urlencoded({extended: false})) app.use(bodyParser.json()) app.use(function(req,res){res.setHeader('Contect-Type','text/plain')res.write('you post:\n')res.end(JSON.stringify(req.body,null,2))//获取post数据 })
3. Express static file 开放资源
var express = require('express') var app = express //方式一:访问直接访问需要的文件的名字,不需要写文件在那么文件的路径 app.use(express.static('./public/')) //方式二:开放访问public文件下的资源文件,访问方式/public/资源文件 app.use('/public',express.static('./public/')) //方式三:开放访问public文件下的资源文件,访问方式/abc别命访问public文件下的资源 app.use('/abc',express.static('./puiblic/'))
PATH路径操作模块
path.basename
获取文件的的名包括扩展名
path.dirname
获取目录名
path.extname
获取扩展名
path.parse
解析文件路径转为对象,其中包括文件夹,文件名,扩展名
格式
root 根目录
dir目录
base包含后缀名的文件名
ext后缀名
name不包含后缀名的文件名
path.join
拼接文件路径,将自动转为c://a//a.txt的格式
path.isAbsolut
判断是否是绝对路径
Node中的其他成员
在每个模块中,除了require
、exports
等模块相关
还有两个特殊的成员
__dirname
可以用来获取当前文件模块所目录的绝对路径__dirfilename
可以用来获取当前文件的绝对路径
Express router 的简单使用方法
var express = require('express') var router = express.Router() // middleware that is specific to this router router.use(function timeLog (req, res, next) {console.log('Time: ', Date.now())next() }) // define the home page route router.get('/', function (req, res) {res.send('Birds home page') }) // define the about route router.get('/about', function (req, res) {res.send('About birds') }) module.exports = router
使用router
var birds = require('./birds') // ... //以/birds开头的路径使用router中的请求方式 //如果不写将某人以请求地址的路径请求 app.use('/birds', birds)
express-session的基本使用
安装包
npm install express-session
//引入express-session包 var session = require('express-session'); app.use(session({secret: 'keyboard cat',//session外加的验证resave: false,saveUninitialized: true }))
router.post('/login',function(req,res){var body = req.body;body.password=md5(md5(body.password));User.find(body,function(error,data){if(error){res.status(200).json({err_code:1,message:error}) }req.session.user=data;//存储key为session的类//req.session.user //取为user的session的类,没有为undfindres.status(200).json({err_code:0,message:'login success'})}) })
案例
请求方式列表:
请求地址 | 请求方式 | 请求参数 |
---|---|---|
/student/find | get | 无 |
/student/add | post | 学生序号、年龄、姓名、学号 |
/student/del | get | |
/student/edit | post | 学生序号、年龄、姓名、学号 |
app模块
var express = require('express'); var app = express(); var fs=require('fs'); var router=require('./router'); var bodyParser = require('body-parser') app.use(bodyParser.urlencoded({extended: false})); app.use(bodyParser.json()); app.use('/public/',express.static('./public/')); app.use('/node_modules/',express.static('./node_modules/')); app.engine('html',require('express-art-template')) app.use(router); app.listen(3000,function(){console.log('nodejs server start port:3000'); })
student_file 模块
var fs = require('fs'); var dir='./db.json'; Array.prototype.remove=function(obj){ for(var i =0;i <this.length;i++){ var temp = this[i]; if(!isNaN(obj)){ temp=i; } if(temp == obj){ for(var j = i;j <this.length;j++){ this[j]=this[j+1]; } this.length = this.length-1; } } } var rederFIle= function(callback){fs.readFile(dir,'utf-8',function(error,data){if(error){return callback(error);}callback(null,data);}) } /* 学生的显示*/ exports.student_show = function(callback){fs.readFile(dir,'utf-8',function(error,data){if(error){return callback(error);}callback(null,data);}) } /* 学生的增加*/ exports.student_add = function(students,callback){ rederFIle(function(error,data){if(error){return callback(error)}var reader_Student=JSON.parse(data);students.num=reader_Student.info.length+1;var is_exist=reader_Student.info.find(function(element){return element.num===students.num;})if(is_exist){return callback('用户存在',null);}reader_Student.info.unshift(students);fs.writeFile(dir,JSON.stringify(reader_Student),function(error){callback(error,null);})}); } /* 学生的删除*/ exports.student_del = function(num,callback){rederFIle(function(error,data){if(error){return callback(error)}var reader_Student=JSON.parse(data); reader_Student.info.forEach(function(elemnt,index){if(elemnt.num===num){reader_Student.info.remove(index);}})fs.writeFile(dir,JSON.stringify(reader_Student),function(error){callback(error,null);}) }) } /* 学生的更改*/ exports.student_change = function(callback){ }
router 模块
var express=require('express') var fs=require('fs'); var student=require('./student_File') var router =express.Router(); /* 加载student*/ router.get('/student',function(req,res){student.student_show(function(error,data){if(error){return res.status(500).send('读取文件错误!');}res.render('index.html',JSON.parse(data.toString()))}) }) /* 添加学生信息 */ router.get('/student/add',function(req,res){res.render('add.html',) }) /*提交数据*/ router.post('/student/add',function(req,res){student.student_add(req.body,function(error,data){if(error){return res.status(500).send('文件操作错误');}res.redirect('/student');}) }) /*删除 */ router.get('/student/del',function(req,res){var num=parseInt(req.query.num);student.student_del(num,function(error,data){if(error){return res.status(500).send('文件操作错误');}res.redirect('/student');}) }) /*修改*/ router.post('/student/edit',function(req,res){ }) module.exports=router;
nodejs/javascripit异步操作
异步操作有:setTime rendFile writeFile ajax
function add(x,y){console.log(1)setTimeout(function(){console.log(2)return ret= x +y;})console.log(3) } add(1,2) 输出的结果:1 3undfined2
回调:
function add(x,y,callback){console.log(1)setTimeout(function(){callback(x+y);})console.log(3) } add(1,2,function(a){console.log(a)})
查找数组中指定的元素
var buff=[{id:1,name:"王明"},{id:2,name:"小明"},{id:3,name:"王八"} ] Array.prototype.findso=function(condition){for(var i=0;i<this.length;i++){if(condition(this[i].id)){return this[i];} } } console.log(buff.findso(function(id){return id==2; }))
Mongodb
mongodb地址:mongodb.org # mongodb 默认使用执行 mongod命令所处盘符跟目录下的/data/db作为自己的数据存储目录 # 所有在第一次执行该命令之前先自动手动新建一个/data/db
如果向修改默认的数据存储目录,可以:
mongod --dbpath = 数据存储目录路径
停止:
1. 在开启服务的控制台,直接Ctrl+c即可停止 2. 或者直接关闭开启服务的控制台也可也
连接数据库
mongo 即可连接本机的mongodb服务
基本命令
show dbs
查看显示所有的数据库
db
查看当前操作的数据库
use 数据库名称
切换到指定的数据(如果没有会新建)
插入一条数据
use myNewDatabase db.collection.insertOne( { x: 1 } );
查看所有的数据
db.collection().find()
mongoose
详细的资料:https://www.cnblogs.com/zhongweiv/p/mongoose.html
mongoose 安装
npm install mongoose
导入
require('mongoose')
连接字符
var mongoose = require('mongoose'),DB_URL = 'mongodb://localhost:27017/mongoosesample'; /*** 连接*/ mongoose.connect(DB_URL); /*** 连接成功*/ mongoose.connection.on('connected', function () { console.log('Mongoose connection open to ' + DB_URL); }); /*** 连接异常*/ mongoose.connection.on('error',function (err) { console.log('Mongoose connection error: ' + err); }); /*** 连接断开*/ mongoose.connection.on('disconnected', function () { console.log('Mongoose connection disconnected'); });
schema
schema是mongoose里会用到的一种数据模式,可以理解为表结构的定义;每个schema会映射到mongodb中的一个collection,它不具备操作数据库的能力
var mongoose = require('mongoose'),DB_URL = 'mongodb://localhost:27017/mongoosesample'; /*** 连接*/ mongoose.connect(DB_URL); /*** 连接成功*/ mongoose.connection.on('connected', function () { console.log('Mongoose connection open to ' + DB_URL); }); /*** 连接异常*/ mongoose.connection.on('error',function (err) { console.log('Mongoose connection error: ' + err); }); /*** 连接断开*/ mongoose.connection.on('disconnected', function () { console.log('Mongoose connection disconnected'); }); module.exports = mongoose;
定义一个user的Schema,命名为user.js
/*** 用户信息*/ var mongoose = require('./db.js'),Schema = mongoose.Schema; var UserSchema = new Schema({ username : { type: String }, //用户账号userpwd: {type: String}, //密码userage: {type: Number}, //年龄logindate : { type: Date} //最近登录时间 }); module.exports = mongoose.model('User',UserSchema);
schema 字符类型
Schema Types内置类型如下: String Number Boolean | Bool Array Buffer Date ObjectId | Oid Mixed
添加insert
var User = require("./user.js"); /*** 插入*/ function insert() {var user = new User({username : 'Tracy McGrady', //用户账号userpwd: 'abcd', //密码userage: 37, //年龄logindate : new Date() //最近登录时间}); user.save(function (err, res) { if (err) {console.log("Error:" + err);}else {console.log("Res:" + res);} }); } insert();
update更新
var User = require("./user.js"); function update(){var wherestr = {'username' : 'Tracy McGrady'};var updatestr = {'userpwd': 'zzzz'};User.update(wherestr, updatestr, function(err, res){if (err) {console.log("Error:" + err);}else {console.log("Res:" + res);}}) } update();
findByIdAndUpdate
var User = require("./user.js"); function findByIdAndUpdate(){var id = '56f2558b2dd74855a345edb2';var updatestr = {'userpwd': 'abcd'};User.findByIdAndUpdate(id, updatestr, function(err, res){if (err) {console.log("Error:" + err);}else {console.log("Res:" + res);}}) } findByIdAndUpdate(); 其它更新方法 Model.findOneAndUpdate([conditions], [update], [options], [callback])
remove删除
var User = require("./user.js"); function del(){var wherestr = {'username' : 'Tracy McGrady'};User.remove(wherestr, function(err, res){if (err) {console.log("Error:" + err);}else {console.log("Res:" + res);}}) } del();
其他删除文件 Model.findByIdAndRemove(id, [options], [callback]) Model.findOneAndRemove(conditions, [options], [callback])
条件查询
var User = require("./user.js"); function getByConditions(){var wherestr = {'username' : 'Tracy McGrady'};User.find(wherestr, function(err, res){if (err) {console.log("Error:" + err);}else {console.log("Res:" + res);}}) } getByConditions();
var User = require("./user.js"); function getByConditions(){var wherestr = {'username' : 'Tracy McGrady'};var opt = {"username": 1 ,"_id": 0};User.find(wherestr, opt, function(err, res){if (err) {console.log("Error:" + err);}else {console.log("Res:" + res);}}) } getByConditions();
输出只会有username字段,设置方法如上,1表示查询输出该字段,0表示不输出比如我要查询年龄范围条件应该怎么写呢?
User.find({userage: {$gte: 21, $lte: 65}}, callback); //这表示查询年龄大于等21而且小于等于65岁
其实类似的还有:
$or 或关系
$nor 或关系取反
$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
$ne 不等于
$in 在多个值范围内
$nin 不在多个值范围内
$all 匹配数组中多个值
$regex 正则,用于模糊查询
$size 匹配数组大小
$maxDistance 范围查询,距离(基于LBS)
$mod 取模运算
$near 邻域查询,查询附近的位置(基于LBS)
$exists 字段是否存在
$elemMatch 匹配内数组内的元素
$within 范围查询(基于LBS)
$box 范围查询,矩形范围(基于LBS)
$center 范围醒询,圆形范围(基于LBS)
$centerSphere 范围查询,球形范围(基于LBS)
$slice 查询字段集合中的元素(比如从第几个之后,第N到第M个元素)
数量查询
Model.count(conditions, [callback])
var User = require("./user.js"); function getCountByConditions(){var wherestr = {};User.count(wherestr, function(err, res){if (err) {console.log("Error:" + err);}else {console.log("Res:" + res);}}) } getCountByConditions(); 也可以传入条件做条件查询!
根据_id查询
Model.findById(id, [fields], [options], [callback])*
var User = require("./user.js"); function getById(){var id = '56f261fb448779caa359cb73';User.findById(id, function(err, res){if (err) {console.log("Error:" + err);}else {console.log("Res:" + res);}}) } getById();
模糊查询
var User = require("./user.js"); function getByRegex(){var whereStr = {'username':{$regex:/m/i}};User.find(whereStr, function(err, res){if (err) {console.log("Error:" + err);}else {console.log("Res:" + res);}}) } getByRegex();
分页查询
var User = require("./user.js"); function getByPager(){var pageSize = 5; //一页多少条var currentPage = 1; //当前第几页var sort = {'logindate':-1}; //排序(按登录时间倒序)var condition = {}; //条件var skipnum = (currentPage - 1) * pageSize; //跳过数User.find(condition).skip(skipnum).limit(pageSize).sort(sort).exec(function (err, res) {if (err) {console.log("Error:" + err);}else {console.log("Res:" + res);}}) } getByPager();
索引和默认值
再看看我对user.js这个schema的修改
/*** 用户信息*/ var mongoose = require('./db.js'),Schema = mongoose.Schema; var UserSchema = new Schema({ username : { type: String , index: true}, //用户账号userpwd: {type: String}, //密码userage: {type: Number}, //年龄logindate : { type: Date, default:Date.now} //最近登录时间 }); module.exports = mongoose.model('User',UserSchema);
其它常用方法 Model.distinct(field, [conditions], [callback]) //去重 Model.findOne(conditions, [fields], [options], [callback]) //查找一条记录 Model.findOneAndRemove(conditions, [options], [callback]) //查找一条记录并删除 Model.findOneAndUpdate([conditions], [update], [options], [callback]) //查找一条记录并更新
快速入门mysql
导入
mysql
包快速测试
nodejs中mysql支持原生sql语句操作
var mysql = require('mysql'); var connection = mysql.createConnection({host : 'localhost',user : 'me',password : 'secret',database : 'my_db' });connection.connect();connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {if (error) throw error;console.log('The solution is: ', results[0].solution); });connection.end();
设置接口
请求方式 | 请求地址 | 请求参数 |
---|---|---|
get | /login | 无 |
post | /post | username、password |
get | /register | 无 |
post | /register | 用户名、密码、 |
nodejs学习整理相关推荐
- Vue-Cli 学习整理【转载】
Vue-Cli 学习整理 坚果 程序猿/艺术 关注他 21 人赞同了该文章 1. vue-cli(vue脚手架)全集 1.1. vue-cli2脚手架 1.1.1. nodejs/npm环境安装 1 ...
- Nodejs学习路线图
Nodejs学习路线图 从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascri ...
- Java设计模式(学习整理)---命令模式
设计模式之Command(学习整理) 1.Command定义 不少Command模式的代码都是针对图形界面的,它实际就是菜单命令,我们在一个下拉菜单选择一个命令时,然后会执行一些动作. 将这些命令封装 ...
- NodeJS学习笔记: RESTful —— 为本系列做个小结
前言 本人不是技术专家,该笔记只是从使用语言进行开发的层面上记录一些体会,不包含也不想尝试从源码或者更深的层次去讨论语言本身的优劣.文章内容是笔者的个人感悟,既不保证正确性,也不保证别人能看懂. 这是 ...
- 2019.07.30 学习整理
2019.07.30 学习整理 数据类型 1. 什么是数据类型 数据类型指的就是变量值的不同类型 2. 为何对数据分类? 变量的是用来反映状态以及状态变化的,毫无疑问针对不同的状态就应该用不同类型的数 ...
- 好程序员web前端分享Nodejs学习笔记之Stream模块
好程序员web前端分享Nodejs学习笔记之Stream模块 一,开篇分析 流是一个抽象接口,被 Node 中的很多对象所实现.比如对一个 HTTP 服务器的请求是一个流,stdout 也是一个流.流 ...
- java基础学习整理(一)
java基础学习整理(一) lesson1: D0s命令: 1.回到根目录,>cd \ 2.复制命令行下的内容,右击标记所要复制的内容,这样就已经复制好了,右击粘贴就可以了. 3.查看,设置环境 ...
- Elastic Nodes Example 翻译及学习整理
文章目录 Elastic Nodes Example 翻译及学习整理 题记: 简介: Node Class Definition Edge Class Definition GraphWidget C ...
- ACM竞赛学习整理--矩阵运算
ACM竞赛学习整理–矩阵运算 了解矩阵类 [任务] 实现矩阵的基本变换 [接口] 结构体:Matrix 成员变量: int n,m 矩阵大小 int a[][] 矩阵内容 重载运算符: +.-.x 成 ...
最新文章
- III (十七) haproxy(2)
- 2014腾讯WE大会:开启未来的五大科技发展趋势
- ceph pg_num 数值计算
- peewee创建mysql_python – peewee MySQL,如何创建包装SQL构建的ins的自定义字段类型?...
- java构造函数_JAVA的构造函数是怎么写的。万分感谢。路过的请不要嘲笑%_%
- 程序员讨厌领导又不想辞职,用一妙招让领导离职,网友:佩服
- In this year of Hors, he is an adopted son
- 镜头分割:像素域方法综述
- Python入门--函数的创建与调用
- html5 复制到剪贴板 兼容,js/jQuery实现复制到剪贴板功能,兼容所有浏览器
- matlab实验数据拟合,利用Matlab对实验数据拟合曲线与函数方法
- Office2021 安装MathType
- STM32——时钟、HSE、旁路模式、有源晶振
- 5款优秀的文档管理系统
- C++随机设置壁纸小软件
- 显示器和计算机主机的接口标准,显示器接口有几种 显示器各种接口知识扫盲 (3)...
- DiscuzX 数据字典 超详细
- ArduPilot之H743+BMI270x2+First Normal Takeoff
- 超详细:Java 读取 Windows 共享文件夹中的文件,并下载到本地电脑中
- Google谷歌权重09年算法