node.js从入门到放弃(一)
以下内容全是我个人理解写出,如有不对,请立刻练习本人进行更改。以免被刚入门的被我带入坑里。
—node是什么?我想大家应该都知道。
node是前端未来干掉后端的一种语言,是用JavaScript来编写后端代码的一种语言。前端走后端的路让后端无路可走。是前端人员走向全栈开发的一条路。
—学习node要掌握什么呢?学习它就需要掌握一下几个方面,这是我现在学习的时候需要掌握的东西,算是很基本的东西了。
一、node的安装
二、数据库的安装和使用(sql命令)
三、node最底层基本写法
四、koa框架
五、Sequelize功能模块使用
六、读写文件
node的安装在这里就不讲了,网上一搜就都能搜到的,不想搜也可以点击这个连接,去看下node安装这些都有详细的介绍。
数据库的安装在网上也能够搜索到,安装数据库可以看下这个博客,这里写的挺详细的,从安装数据库到navicat MySQL的安装都有 查看请点击这里↓↓↓↓↓↓↓
sql的命令离不开增删改查
mydb:数据库名
user:表名
text:对应的属性名
2:要插入的数据
id:主键
age:对应的属性
增: INSERT INTO `mydb`.`user` (`text`) VALUES ('2');
删:DELETE FROM user WHERE id=1
改:UPDATE `mydb`.`user` SET `age`='22' WHERE `id`='1';
查:select * from user
以上就是数据操作的主要四个,其他命令可以百度一下,一抓一大把。
接下来进入最主要的地方了,开是接触放弃的地方了,底层的基本用法
+开始需要把数据库放进去才能够使用
$ cnpm install mysql
接下来引入你本地的数据库
// 连接数据库
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '123456',
database : 'node'
});
接下来开始捣鼓你的数据库(我的数据库放了一下的数据名)
接下来对下面的数据进行操作(用上面已经连接上的数据库)
node底层写法:
var http = require('http');
// 连接数据库
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '123456',
database : 'node'
});
// 请求下数据库
connection.connect();
var http = require("http");
var url = require("url");
// 调用方法
function start() {
function onRequest(request, response) {}
http.createServer(onRequest).listen(8888);
端口号是8888去进行请求
}
start();
新增数据方法
// 新增数据
const hello = function (response, data) {
connection.query(`INSERT INTO log (content, summary, user, day) VALUES ("${data.content}", "${data.summary}", "${data.user}","${data.day}");`, function (error, results, fields) {
if (error) throw error;
// 请求成功,返回格式
response.writeHead(200, {"Content-Type": "application/json"});
// 返回给页面的数据
response.write(JSON.stringify(results.insertId));
// 请求结束
response.end();
});
}
获取列表
// 获取列表
const hello2 = function (response, data) {
connection.query(`select * from log`, function (error, results, fields) {
if (error) throw error;
response.writeHead(200, {"Content-Type": "application/json"});
response.write(JSON.stringify(results));
response.end();
});
}
删除事件
// 删除id=4
const hello4 = function (response,data){
console.log(data)
connection.query(`DELETE FROM log WHERE id=${data.id}`,function (error,results,fields) {
if (error) throw error; response.write("ok");
response.end();
})
}
分页写法
// 分页写法
const hello3 = function (response, page, size) {
console.log('page, size', page, size)
connection.query(`select * from log limit ${size} offset ${(page-1)*size} `, function (error, results, fields) {
if (error) throw error;
response.writeHead(200, {"Content-Type": "application/json"});
response.write(JSON.stringify(results));
response.end();
});
}
调用的话直接调用方法就可以(这里还需要注意是get请求还是post请求)
// 调用方法
function start() {
function onRequest(request, response) {
// /hello
var pathname = url.parse(request.url).pathname.split('/');
// /hello3/1/10
// 接收数据
if (request.method === 'POST') {
request.on('data', function(data) {
// 把数据转换成json格式
let data1 = JSON.parse(data.toString())
console.log('data: ', data1.toString(), data1)
// 接收到的接口调用什么方法
switch(pathname[1]) {
case 'hello': { hello(response, data1) } break;
case 'hello2': { hello2(response, data1) } break;
case 'hello3': {
// 用拼接的方式(get)获取数据方法
// let page = pathname[2]
// let size = pathname[3]
// console.log(pathname)
// 用接收体来调用数据(post)
hello3(response, data1.page, data1.size)
} break;
case 'hello4': { hello4(response, data1) } break;
// 调用weitch方法
default: response.end();
}
})
}
完整的使用代码
var http = require('http');
// 连接数据库
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '123456',
database : 'node'
});
// 请求下数据库
connection.connect();
var http = require("http");
var url = require("url");
// 新增数据
const hello = function (response, data) {
connection.query(`INSERT INTO log (content, summary, user, day) VALUES ("${data.content}", "${data.summary}", "${data.user}","${data.day}");`, function (error, results, fields) {
if (error) throw error;
// 请求成功,返回格式
response.writeHead(200, {"Content-Type": "application/json"});
// 返回给页面的数据
response.write(JSON.stringify(results.insertId));
// 请求结束
response.end();
});
}
// 获取列表
const hello2 = function (response, data) {
connection.query(`select * from log`, function (error, results, fields) {
if (error) throw error;
response.writeHead(200, {"Content-Type": "application/json"});
response.write(JSON.stringify(results));
response.end();
});
}
// 删除id=4
const hello4 = function (response,data){
console.log(data)
connection.query(`DELETE FROM log WHERE id=${data.id}`,function (error,results,fields) {
if (error) throw error; response.write("ok");
response.end();
})
}
// 分页写法
const hello3 = function (response, page, size) {
console.log('page, size', page, size)
connection.query(`select * from log limit ${size} offset ${(page-1)*size} `, function (error, results, fields) {
if (error) throw error;
response.writeHead(200, {"Content-Type": "application/json"});
response.write(JSON.stringify(results));
response.end();
});
} // 调用方法
function start() {
function onRequest(request, response) {
// /hello
var pathname = url.parse(request.url).pathname.split('/');
// /hello3/1/10
// 接收数据
if (request.method === 'POST') {
request.on('data', function(data) {
// 把数据转换成json格式
let data1 = JSON.parse(data.toString())
console.log('data: ', data1.toString(), data1)
// 接收到的接口调用什么方法
switch(pathname[1]) {
case 'hello': { hello(response, data1) } break;
case 'hello2': { hello2(response, data1) } break;
case 'hello3': {
// 用拼接的方式(get)获取数据方法
// let page = pathname[2]
// let size = pathname[3]
// console.log(pathname)
// 用接收体来调用数据(post)
hello3(response, data1.page, data1.size)
} break;
case 'hello4': { hello4(response, data1) } break;
// 调用weitch方法
default: response.end();
}
})
} // Get
if (request.method === 'GET') {
response.end('aaaaa');
}
} http.createServer(onRequest).listen(8888);
}
start();
开始化简模式。学习使用koa框架
安装koa
npm intall koa2
npm intall koa-router
在页面引入
const Koa = require('koa')
const bodyParser = require('koa-bodyparser')
const Router = require('koa-router')
来个简单例子
const Koa = require('koa');
//引入koa
const app = new Koa();
//方法放到app下
app.use(async ctx => {
ctx.body = 'Hello World';
});
//执行方法
app.listen(3000);
//app创建端口号
koa主要的就是request的请求方法,response响应,因为太多就不在这讲了,想了解的 戳这里↓↓↓↓↓
app.use(async ctx => {
console.log(ctx.request.href)
//获取到地址,换个方法就可以获取前台传得数据
ctx.response.body = "aaaaa"
//返回值
});
来上面的去看文档慢慢敲就行了,Sequelize功能模块使用来讲一下
var Sequelize = require('sequelize');
var mysql = new Sequelize('node', 'root', '123456', {
host: 'localhost',
dialect: 'mysql',
pool: {
max: 5,
min: 0,
idle: 10000
},
})
看数据库的导入方式就不一样了,接下来我们使用的可能多数都是这样的,样式了。
//数据表里面的内容
var Log = mysql.define('log', {
id: {
primaryKey: true,
type: Sequelize.INTEGER,
},
content: Sequelize.STRING,
summary: Sequelize.STRING,
user: Sequelize.STRING,
day: Sequelize.STRING,
}, {
freezeTableName: true, // Model 对应的表名将与model名相同
timestamps: false
});
使用方法查询数据
Log.findAll({
where: {
$and: [
{ id: {gt: 32} },
//大于多少
{ id: {lt: 35} }
//小于等于多少
]
},
raw: true
}).then(res => {
console.log(res.length)
//一共多少条
for(var i=0 ;i<res.length;i++){
//遍历出来显示
Log.create(
{
content: res[i].content,
summary: res[i].summary,
user: res[i].user,
day: res[i].day
}
)
} })
整体使用
const main = async function() {
//查询所有
let res = await Log.findAll({
raw: true
})
//写入
let newDatas = res.map(item => ({
a: item.content,
b: item.summary,
c: item.user,
d: item.day,
}))
//往新表里插入多条数据
await Aaa.bulkCreate(newDatas)
//删除数据
await Aaa.destroy({ where: {
id: 2
}})
//修改数据
await Aaa.update({
a: 'item.content',
b: 'item.summary',
c: 'item.user',
d: 'item.day',
}, {
where: {
id: 3
}
})
} main()
接下来进行三军会师,用三种方法写成最简单的代码来调用数据
开始在app文件中
const Koa = require('koa')
const bodyParser = require('koa-bodyparser')
const router = require('./controllers')
//引入使用包
const app = new Koa()
app.use(bodyParser())
//调用koabadyparser方法
app.use(router.routes())
app.listen(3000)
//引入文件,创建端口
在controllers文件中写入方法并进行调用
const Router = require('koa-router')
const router = new Router()
const services = require('./services') //查询所有数据
router.get('/', async (ctx, next) => {
let res = await services.hello1()
ctx.body = res
});
//返回值hello world
router.get('/hello', (ctx, next) => {
ctx.body = "hello world"
});
//新增数据
router.post('/hello2', async (ctx, next) => {
let obj = ctx.request.body
let res = await services.hello2(obj)
let eee = {
content : res.content,
summary : res.summary
}
ctx.body = {
statusCode: 200,
result:eee
}
})
//删除数据
router.post('/hello3', async (ctx, next) => {
let obj = ctx.request.body
let res = await services.hello3(obj) ctx.body = {
statusCode: 200,
}
})
//查询数据
router.post('/hello4', async (ctx, next) => {
let obj = ctx.request.body
let res = await services.hello4(obj)
ctx.body = res
})
//更改数据
router.post('/hello5', async (ctx, next) => {
let obj = ctx.request.body
let res = await services.hello5(obj)
ctx.body = res
})
//调用
module.exports = router
在services.js文件中
const Log = require('./models') const hello = async function (obj) {
//放个查询方法
let logs = await Log.Log.findAll({
where: {
$and: [
{id: { $gt: obj.id }},
{id: { $lte: obj.css }}
]
}
}) return logs
}
//查询所有数据大于0的
const hello1 = async function () {
let loge = await Log.Log.findAll({
where: {
id: { gt: 0},
}
}) return loge
}
//新增数据
const hello2 = async function (obj) {
let loge = await Log.rizhi.create({
content:obj.content,
summary:obj.summary,
user:obj.user,
day:"2015-10-7"
}) return loge
}
//删除数据
const hello3 = async function (obj) {
let loge = await Log.rizhi.destroy({
where:{
id : obj.id
}
}) return loge
}
查询数据
const hello4 = async function (obj) {
let ass = {
content : obj.content,
summary : obj.summary,
user : obj.user,
}
if(!obj.content){
delete ass.content
}
if(!obj.summary){
delete ass.summary
}
if(!obj.user){
delete ass.user
}
let loge = await Log.rizhi.findAll({ where:ass
}) return loge
}
//更改数据
const hello5 = async function (obj) {
let ass = {
content : obj.content,
summary : obj.summary,
user : obj.user,
} let loge = await Log.rizhi.update(ass,{ where:{
id : obj.id
}
})
let cha = await Log.rizhi.findAll({
where: {
id: obj.id,
}
})
return cha
}
需要调用的方法
module.exports = {
hello,hello1,hello2,hello3,hello4,hello5
}
最后将表格的内容模块导入到models.js中
const mysql = require('./mysql')
//导入数据库
const Sequelize = require('sequelize') //log表内数据格式
var Log = mysql.define('log', {
id: {
primaryKey: true,
type: Sequelize.INTEGER,
},
content: Sequelize.STRING,
summary: Sequelize.STRING,
user: Sequelize.STRING,
day: Sequelize.STRING,
}, {
freezeTableName: true, // Model 对应的表名将与model名相同
timestamps: false
}); //日志表内数据格式
var rizhi = mysql.define('rizhi', {
id: {
primaryKey: true,
type: Sequelize.INTEGER,
},
content: Sequelize.STRING,
summary: Sequelize.STRING,
user: Sequelize.STRING,
day: Sequelize.STRING,
}, {
freezeTableName: true, // Model 对应的表名将与model名相同
timestamps: false
}); 调出两个表
module.exports = {Log,rizhi}
这就是一个完整的的node项目了,增删改查,以后就需要自己去扩展了
读写文件的话,就免不了书把txt,excel、sql、之间的数据转换,以后在讲。。。。。。
node.js从入门到放弃(一)的更多相关文章
- node.js从入门到放弃(二)
上章讲了学习node,应该去学习什么,对这些框架去进行学习现在咋们聊聊如何用原生来进行操作 主要来讲一下events-事件触发器 events是什么东西呢?他的英文翻译,活动,事件的意思,在计算机语言 ...
- node.js从入门到放弃《什么是node.js》
1.什么是node.js Node.js是一个后端的Javascript运行环境(支持的系统包括*nux.Windows),这意味着你可以编写系统级或者服务器端的Javascript代码. Node. ...
- node.js从入门到放弃《模块》
在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很 ...
- Node.js快速入门
Node.js是什么? Node.js是建立在谷歌Chrome的JavaScript引擎(V8引擎)的Web应用程序框架. 它的最新版本是:v0.12.7(在编写本教程时的版本).Node.js在官方 ...
- Node.js开发入门—使用cookie保持登录
这次来做一个站点登录的小样例,后面会用到. 这个演示样例会用到Cookie.HTML表单.POST数据体(body)解析. 第一个版本号,我们的用户数据就写死在js文件中. 第二个版本号会引入Mong ...
- Node.js开发入门—HelloWorld再分析
在Node.js开发入门(1)我们用http模块实现了一个简单的HelloWorld站点,这次我们再来细致分析下代码.了解很多其它的细节. 先看看http版本号的HelloWorld代码: 代码就是这 ...
- Node.js开发入门—使用AngularJS
做一个Web应用,一般都有前台和后台,Node.js能够实现后台.利用jade模板引擎也能够生成一些简单的前台页面,但要想开发出具有实际意义的现代Web应用.还得搭配一个Web前端框架. Angula ...
- Node.js核心入门
前言: 因为以前学习Node.js并没有真正意义上的去学习它,而是粗略的学习了npm的常用命令和Node.js一些模块化的语法,因此昨天花了一天的时间看了<Node.js开发指南>一书.通 ...
- D3.js从入门到“放弃”指南
前言 近期略有点诸事不顺,趁略有闲余之时,玩起D3.js.之前实际项目中主要是用各种chart如hightchart.echarts等,这些图形库玩起来貌都是完美的,一切皆可配置,但几年前接触了D3之 ...
随机推荐
- 深入分析 JDK8 中 HashMap 的原理、实现和优化
HashMap 可以说是使用频率最高的处理键值映射的数据结构,它不保证插入顺序,允许插入 null 的键和值.本文采用 JDK8 中的源码,深入分析 HashMap 的原理.实现和优化.首发于微信公众 ...
- 20170406-ms
Interval 间隔 revoke v撤销 alert adj 警觉的 n警报
- 洛谷 - P1162 - 填涂颜色 - 简单搜索
https://www.luogu.org/problemnew/show/P1162 在外面加一圈0把0连起来,然后把所有0换成2,再从(0,0)把连通的2全部改回来. 这也是一个判断内外圈的好办法 ...
- YCOJ黑熊过河
Description 有一只黑熊想过河,但河很宽,黑熊不会游泳,只能借助河面上的石墩跳过去,他可以一次跳一墩,也可以一次跳两墩,但是每起跳一次都会耗费一定的能量,黑熊最终可能因能量不够而掉入水中,所 ...
- EasyUI 前台开发的好助手
今天用了下EASY ui 确实经典,前端开发利器啊
- websocket实现单聊
server# @File: ws from flask import Flask, request, render_template from geventwebsocket.handler imp ...
- 位运算 UEST 84 Binary Operations
题目传送门 题意:所有连续的子序列的三种位运算计算后的值的和的期望分别是多少 分析:因为所有连续子序列的组数有n * (n + 1) / 2种,所以要将他们分类降低复杂度,以ai为结尾的分成一组,至于 ...
- NYOJ #21 三个水杯(bfs)
描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有标识,只能根据给出的水杯体积来计算.现在要求你写出一个程序,使其输出使初始状态到达目标 ...
- iphone 开发Categories 、Extensions 区别 --转
Category和Extension这两个概念,即便对于Java程序员,可能也会感到陌生.这是Objective C为程序员提供的两个强大的动态机制——简单地说,它们允许程序员为已有的对象添加新的方法 ...
- JavaScript整理
JavaScript是脚本语言 常用对话框: alert()——警告对话框,作用是弹出一个警告对话框 confirm()——带确定和取消按钮,返回True或false prompt()——弹出一个可以 ...