使用Express+sqlite3实现RESTful web服务器。
相关的API有:
npm init -y
npm i express body-parser sqlite3 -D
db.js
const sqlite3 = require('sqlite3').verbose();
const dbname = 'mysqlite';
// 创建并连接一个数据库
const db = new sqlite3.Database(dbname)
// 创建一个articles表
db.serialize(() => {
const sql = `
CREATE TABLE IF NOT EXISTS articles
(id integer primary key,title,content TEXT)
`;
// 如果没有articles表,创建一个
db.run(sql);
});
// Articles API
class Articles {
// 获取所有文章
static all(cb) {
// 使用sqlite3的all
db.all('SELECT * FROM articles', cb);
}
// 根据id 获取文章
static find(id, cb) {
// 使用sqlite3的get
db.get('SELECT * FROM articles WHERE id = ?', id,cb);
}
// 添加一个条文章记录
static create(data, cb) {
const sql = `
INSERT INTO
articles(title,content)
VALUES(?,?)
;select last_insert_rowid();`;
db.run(sql, data.title, data.content, cb);
}
// 删除一篇文章
static delete(id, cb) {
if (!id) return cb(new Error(`缺少参数id`));
db.run('DELETE FROM articles WHERE id=?', id, cb)
}
// 更新一篇文章数据
static update(data, cb) {
const sql = `
UPDATE articles
SET title=?,content=?
WHERE id=?
`
db.run(sql, data.title, data.content, data.id, cb)
}
}
module.exports.Articles = Articles;
index.js
const express = require('express');
// 用于处理post请求的消息体
const bodyParser = require('body-parser');
const app = express();
const Articles = require('./db').Articles;
// 使用body-parser,支持编码为json的请求体
app.use(bodyParser.json());
// 支持编码为表单的消息体
app.use(bodyParser.urlencoded(
{
extended: true
}
))
const port = process.env.PORT || 3002
// 获取文章列表
app.get('/articles', (req, res, next) => {
Articles.all((err, articles) => {
if (err) return next(err);
res.send(articles)
})
});
// 获取某一篇文章
app.get('/articles/:id', (req, res, next) => {
Articles.find(req.params.id, (err, article) => {
if (err) return next(err);
res.send(article)
})
});
// 删除一篇文章
app.delete('/articles/:id', (req, res, next) => {
Articles.delete(req.params.id, (err, article) => {
if (err) return next(err);
res.send("删除成功")
})
});
// 创建一篇文章 使用消息体解析
app.post('/articles', (req, res, next) => {
Articles.create({
"title": req.body.title ? req.body.title : '',
"content": req.body.content ? req.body.content : ''
}, (err, data) => {
if (err) return next(err);
res.send('添加成功')
});
});
// 更新一篇文章数据
app.put('/articles/:id', (req, res, next) => {
Articles.update({
"id":req.params.id,
"title": req.body.title ? req.body.title : '',
"content": req.body.content ? req.body.content : ''
}, (err, data) => {
if(err) return next(err);
res.send('更新成功')
});
})
app.listen(port, () => {
console.log(`server susscess localhost:${port}`)
})