nodejs使用Express+sqlite3实现RESTful API http服务器的增删改查

林德华
2023-12-01

使用Express+sqlite3实现RESTful web服务器。

相关的API有:

  • get: /articles —获取所有的文章列表
  • get: /articles/:id — 通过id获取一篇文章
  • post:/articles — 新增一篇文章
  • put:/articles/:id —通过修改一篇文章
  • delete:/articles/:id —通过id上出一篇文章

1、初始化项目

 npm init -y

2、安装需要的模块

npm i express body-parser sqlite3 -D

3、创建和 编写db.js

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;

4、创建和编写index.js

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}`)
})
 类似资料: