Skip to content

HappyJeannie/note

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

note

使用 node + express 完成本次项目的开发

一、项目初始化

npm init      // 初始化项目
npm install express --save    // 安装 express
npm install --save express-generator  // 安装 express 生成器
./node_modules/express-generator/bin/express-cli.js -f -e     // 当前目录不为空,强制初始化并且使用的模板引擎为 Jade
npm install           // 安装依赖
npm start             // 项目启动,打开 localhost:300
npm run watch         // 代码如果有修改则重新编译打包
npm run webpack       // 打包项目

  • nrm 了解一下,其实就是切换镜像源,常用指令有 展示镜像源列表: nrm ls使用某一个镜像源:nrm use cnpm ,这里就不详细介绍了,自己用的时淘宝镜像

二、目录结构说明

|-- bin       // 启动目录
|-- public      // webpack 输出目录,express 启动后加载的文件
  |-- js
  |-- css
  |-- fonts
  |-- imgs
|-- routes       // 路由目录,根据不同页面划分
|-- src           // 源文件
  |-- imgs
  |-- js
    |-- app           // 各个页面的入口文件
      |-- index.js      
      |-- detail.js
    |-- lib           // 引入的库
    |-- moduls        // 自定义模块 
  |-- less
  |-- webpack.config.js     // webpack 配置文件
|-- views
  |-- index.ejs       // html 模版文件
|-- app.js        // 整个项目的入口文件
|-- package.json    // 包管理

三、接口与数据库

1、接口请求定义

所有的接口请求定义为: /api/xxx,那么所有接口请求的如下:

/api/notes        GET   req:{}                              // 获取所有的 note
/api/note/create  POST  req:{note:'hello world'}            // 创建一个 note
/api/note/edit    POST  req:{note:'new note',id:100}        // 修改一个 note
/api/note/delete  POST  req:{id:100}                        // 删除一个 note

以上接口响应的示例为:

// 获取所有 note 的接口
{status:0,data:[{},{}]} / {status:1,errMsg:'失败的原因'}          // 请求成功,status 为 0 ,data 返回列表数组,请求失败,status 为 1 ,并返回错误信息

// 创建一个 note / 修改一个 note / 删除一个 note
{status:0} / {status:1,errMsg:'失败的原因'} // 请求成功,status 为 0 ;请求失败,status 为 1 ,并返回错误信息

2、数据库

数据库采用 sequelize ,可以直接在 npm 中下载,在终端中执行命令 npm install --save swquelize ,其中,sequelize 可选 mysql 、 sqlite 、 postgres 、 mssql ,因为 sqlite 配置简单无需用户名密码,我们选择使用 sqlite 。在终端中执行 npm install --save sqlite3

const Sequelize = require('sequelize');         // 引入 sequelize

const sequelize = new Sequelize(undefined,undefined,undefined,{
  host:'localhost',
  dialect:'sqlite',
  storage:'../database/database.sqlite'           // 数据存储位置
})
<!--  
// 以下是用来验证数据库是否连接成功,如果成功则打印 'Connection has been established successfully.'
// 连接成功后即可删除
 sequelize                                              
   .authenticate()
   .then(() => {
     console.log('Connection has been established successfully.');
   })
   .catch(err => {
     console.error('Unable to connect to the database:', err);
   }); 
-->
  // 创建一个表 note ,其中的字段 text 的数据类型为 字符串
  const Note = sequelize.define('note', {
    text: {
      type: Sequelize.STRING
    }
  });
  // Note.drop()        删除表
  // force: true will drop the table if it already exists
  // 如果 force 为 true 那么如果表已经存在,那么会强制删除。默认为 false
  Note.sync({force:true}).then(() => {
    // 创建表
    Note.create({
      text: 'John'
    })
  }).then(() => {
    // 查询表中所有数据
    // 由于每一条数据有带有大量无用信息,添加查询参数(raw:true)能够筛选出 data 信息
    // {raw:true,where:{id:2}}   // 带查询参数的示例
    Note.findAll({raw:true}).then(notes => {      
      console.log(notes)
    })
  })
  // 删除某一条 text 内容为 haha 数据
  Note.destory({
    where:{
      text:'haha'
    }
  })

3、数据库常用指令

Note.findAll({raw:true})                              // 获取所有数据
Note.create({text:text,uid:uid})                      // 创建一条新的数据
Note.update({text:text,uid:uid},{where:{uid:uid}})    // 更新一条新的数据
Note.destroy({where:{uid:uid}})                       // 删除一条数据

以上命令基本能实现增删改查的功能

四、node 端调试

可以全局安装 node-inspector,但是最新版已经支持 node 调试,可以在启动项目的时候使用命令 node --inspect ./bin/www

五、登录注册功能

1、passport

node 中的 passport 模块可以实现登录注册的认证。

其他:

1、发布订阅模式

这个模式用于组件、模块之间进行解耦。

2、 width() 、 outerWidth()

var a = 元素本身的宽度;

width() = a;

innerWidth() = a+padding;

outerWidth() = a+padding+border;

outerWidth(true) = a+padding+border+margin;