10.20 Notes
10.14-10.20 Learning Notes
Sequelize
model & tables
模型是单数
表是复数
migrations
models
routes
seeders
Nodejs
https://www.bilibili.com/video/av38925557
自定义模块
要让外部访问模块里面的方法
模块文件中:用exports & module.exports暴露方法
exports与module.exports的不同:
1.exports
./node_modules/nav/nav.js
let str = 'this is /node_modules/nav/nav.js';
exports.str=str;
./useNav.js
console.log(nav);
// { str: 'this is /node_modules/nav/nav.js' }
2.module.exports
./node_modules/nav/nav.js
let str = 'this is /node_modules/nav/nav.js';
module.exports = str;
./useNav.js
console.log(nav);
// this is /node_modules/nav/nav.js'
需要访问模块的文件中:require(‘model’);
require
.js可省略
绝对路径写法:
require('./node_modules/bar/bar.js');
require('./node_modules/bar/bar');
位于node_modules下的写法:
require('nav/nav');
配置package.json后的写法:
./node_modules/bar/package.json
"main": "nav.js"
./useNav.js
require('nav');
nodemon
自动更新代码并运行
npm i nodemon -s
./package.json:
"scripts": {
"start": "nodemon ./yourFile"
},
npm start
http
let app = http.createServer(function (req, res) {
res.writeHead(200, { "Content-Type": "text/html;charset='utf-8'" });
res.write("hello nodejs");
res.end();
});
app.listen(3000, '127.0.0.1');
url.parse("www.baidu.com");//地址到对象
url.format({ //对象到地址
...
});
url.resolve("http://www.baidu.com", 'news')
fs
fs.stat('httpmodel.js', function (err, stats) {//文件信息
if (err) {
console.error(err);
return false;
}
console.log('file:' + stats.isFile());
console.log('directory:' + stats.isDirectory());
})
fs.mkdir('path',callback)//make directory
fs.writeFile('file','content',callback) //会覆盖原来的
fs.appendFile('file','content',callback) //在文件后面加上去
fs.readFile('t.txt', function (err, data) {
if (err) {
console.error(err);
return false;
}
console.log(data.toString());
})
fs.readdir('dir',function(err,data))
fs.rename('./app.js','app/app.js',callback) //改名或剪切
fs.rmdir('dir',callback)//remove directory
fs.unlink('file',callback)//删除文件
find all directories in one directory
//let filesArr = [];
fs.readdir('upload', function (err, files) {
if (err) {
console.error(err);
return false;
}
else {
console.log(files);
for (let i = 0; i < files.length; i++) //let大法好
fs.stat(files[i], (err, stats) => {
console.log(files[i]);
})
// (function getFile(i) { //异步+函数+递归
// if (i == files.length) {
// console.log(filesArr);
// return false;
// }
// fs.stat('html/' + files[i], function (err, stats) {
// if (files[i].isDirectory) {
// filesArr.push(files[i]);
// }
// getFile(i + 1);
// })
// })(0)
}
})
let & var
http://es6.ruanyifeng.com/#docs/let
for (var i = 1; i <= 3; i++)
setTimeout(() => {
console.log(i);
}, 100);
4
4
4
for (let i = 1; i <= 3; i++)
setTimeout(() => {
console.log(i);
}, 100);
1
2
3
上面代码中,变量i是let声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量。你可能会问,如果每一轮循环的变量i都是重新声明的,那它怎么知道上一轮循环的值,从而计算出本轮循环的值?这是因为 JavaScript 引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算。
箭头函数
var sum = (num1, num2) => num1 + num2;
// 等同于
var sum = function(num1, num2) {
return num1 + num2;
};
// 正常函数写法
var result = values.sort(function (a, b) {
return a - b;
});
// 箭头函数写法
var result = values.sort((a, b) => a - b);
Pygame
https://mp.weixin.qq.com/s/Or84egkjMzG3YC8Ed6n1kw
pygame.display.set_mode((width,height))#窗口大小
pygame.display.set_caption()#标题栏
def draw_rect(color, position):#绘制矩形
pygame.draw.rect(caption, color, pygame.Rect(position[0], position[1], cell, cell))
#Rect:((x, y), (width, height)) 以(x,y)为左上角,绘制width*height的矩形