Newer
Older
2022-autumn-study / bbs.js
@ItoRino ItoRino on 16 Oct 2022 1 KB fix:db
//sqlite3に保存する機能完成
//http://www.nct9.ne.jp/m_hiroi/light/node03.html
const http = require('http'),
fs = require('fs'),
ejs = require('ejs'),
qs = require('querystring'),
sqlite = require('sqlite3'),
template = fs.readFileSync(__dirname + '/public_html/bbs1.ejs', 'utf-8'),
db = new sqlite.Database(__dirname + '/public_html/bbs.sqlite'),
server = http.createServer();

function renderForm(db, res, msg = null) {
db.all('select * from bbs', (err, posts) => {
const data = ejs.render(template, {
posts: posts,
msg: msg
});
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data);
res.end();
});
}

function insertData(query, db, res) {
if (query.name != '' && query.comment != '') { 
db.run('insert into bbs (name, comment, date) values (?, ?, ?)',
     [query.name, query.comment, (new Date()).toLocaleString()]);
renderForm(db, res);
} else {
renderForm(db, res, "名前とコメントを入力してください");
}
}

db.serialize();
db.run('create table if not exists bbs (id integer primary key autoincrement, name text, comment text, date text)');

server.on('request', (req, res) => {
if (req.method == 'POST') {
let data = "";
req.on('data', x => data += x);
req.on('end', () => insertData(qs.parse(data), db, res));
} else {
renderForm(db, res);
}
});

server.listen(2022, 'localhost');
console.log("server listening...");