作者

一、简述

本次项目是用node.js写后台接口,前端使用vue.js分离的方法实现一个在线点咖啡的项目。本节教程只是一个简单的入门,关于实际用法后期继续更新。

二、搭建应用

1、 通过应用生成器工具 express-generator 可以快速创建一个应用。执行如下命令的前提是你的终端已经安装好了node.js。如果没有,请自行安装。

npm install -g cnpm --registry=https://registry.npm.taobao.org #安装淘宝镜像
npm install express-generator -g #全局安装生成器
express --view=ejs blog          #创建项目
cd blog                         #进入项目
cnpm i                  #安装node_modules

DEBUG=blog:* npm start    #启动项目

2、然后在浏览器中打开 http://localhost:3000/ 网址就可以看到这个应用了。

3、从webstrom打开项目,routes文件夹里面的index.js,尝试去修改title里面的 Express123,然后刷新页面,发现页面并没有任何变化。此时需按照以下命令安装:

cnpm i nodemon -S

package.json文件中修改如下代码,

"scripts": {
  "start": "nodemon ./bin/www"
},

改完后,使用命令 npm start 重新启动项目,测试实时监听成功!

三、基本使用

1、配置,安装数据库。Sequelize是一个基于 promiseNode.js ORM, 目前支持 Postgres, MySQL, SQLiteMicrosoft SQL Server. 它具有强大的事务支持, 关联关系, 读取和复制等功能. 参考文档https://demopark.github.io/sequelize-docs-Zh-CN/

cnpm install --save sequelize   #安装数据库依赖包
cnpm install --save mysql2      #安装数据库
sequelize init                  #初始化,会创建对应项目的模型、迁移、种子文件等

#如果初始化失败,请执行下面命令,再初始化
npm install -g sequelize-cli

2、创建迁移文件和模型:sequelize model:generate --name Article --attributes title:string,content:text

3、在config/config.json文件中,修改数据库配置。

创建你的本地数据库:sequelize db:create --charset 'utf8mb4'

4、执行数据库迁移:sequelize db:migrate

5、创建种子文件:sequelize seed:generate --name demo-article

6、更改种子文件数据后,运行种子文件:sequelize db:seed:all

up: (queryInterface, Sequelize) => {
     return queryInterface.bulkInsert('Articles', [
        {
             title: '今天天气真好',
             content: '天气预报说虽然今天是晴天,可是明天会下雨。',
             createdAt: new Date(),
             updatedAt: new Date()
         },
         {
             title: '武汉什么早餐最好吃?',
             content: '毫无疑问是三鲜豆皮 + 热干面 + 米酒',
             createdAt: new Date(),
             updatedAt: new Date()
          }
     ], {});
},

注:查看数据库,你会发现新插入的数据时间有问题,当服务器不在东八区时,处理时区问题有时可能比较烦, 特别是当客户端是北京时间,跟服务器有时差,这时需要做如下处理:

cnpm i china-time --save

seeders文件夹的种子文件中,加入如下代码:

const chinaTime = require('china-time');

***

createdAt: chinaTime('YYYY-MM-DD HH:mm:ss'),

再去运行种子文件命令,问题解决!参考文献:https://www.v2ex.com/t/429546

这种方法比较复杂,我们来使用一个简单的方法来解决这个问题。在config/config.json文件中添加如下代码:

"timezone": "+08:00"

如图所示:

7、启动项目:npm start 。查看代码你会发现,这时,我们已经创建了一个单独的模块 articles

app.js文件中注册路由,如下:

****
var articlesRouter = require('./routes/articles');

****
app.use('/articles', articlesRouter);

****

打开articles.js文件写上如下代码:

var express = require('express');
var router = express.Router();
var models = require('../models');

//文章列表
router.get('/', function (req, res, next) {
    models.Article.findAll({limit:2,order: [['id', 'DESC']]}).then(articles => {
        res.json({articles: articles});
    })
});


//文章详情
router.get('/:id', function (req, res, next) {
    let id = req.params.id;
    models.Article.findByPk(id).then(article => {
        res.json({article: article})
    })
});

// 新增文章
router.post('/', function (req, res, next) {
    //res.json(req.body)
     models.Article.create(req.body).then((article) => {
         res.json({article: article})
     });
});

// 编辑文章
router.put('/:id', function (req, res, next) {
    models.Article.findByPk(req.params.id).then(article => {
        article.update(req.body);
        res.json({article: article})
    })
});

// 删除
router.delete('/:id', function (req, res, next) {
    models.Article.findByPk(req.params.id).then(article => {
        article.destroy();
    })
});

module.exports = router;

浏览器访问:http://localhost:3000/articles,你会发现,我要查的数据已被查出:

转载请注明,来自https://itfun.tv/news/150