一、简述
本次项目是用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
是一个基于 promise
的 Node.js ORM
, 目前支持 Postgres
, MySQL
, SQLite
和 Microsoft 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'
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZwLi56h0-1584445559798)(https://images.itfun.tv/photo/2019/44c8f36ea2911db2557e2ae0303ebdfd.png-large)]
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
,你会发现,我要查的数据已被查出: