ตับหวาน
คลังเก็บรายเดือน: พฤศจิกายน 2012
สิ่งที่ควรทำก่อนใช้ LibreOffice กับภาษาไทย
Complicated public transports in Bangkok
ลองใช้ jasmine-node เถื่อน ๆ :-P
ผมไปทำ spec ไว้ใน tests/spec/foo_spec.js ไม่ได้สื่ออะไรเลย
var subj = require(‘../../subj.js’);
describe(‘foo suite’, function() {
var subj_ = new subj.Subj();
it("do sth", function() {
expect(subj_.x).toBe(100);
});
});
แล้วก็ถามด้วยสิ่งที่จะโดน test
exports.Subj = Subj;
function Subj() {
this.x = 100;
}
ลง jasmine-node ด้วย
sudo npm install -g jasmine-node
เวลา test ก็สั่ง
jasmine-node tests
(tests นี่คือชื่อ folder นะ)
เป็นอันใช้ได้ แต่กว่าจะใช้ได้ก็ต้องมั่วอยู่สักพักอะนะ
แย่หน่อยผมไม่รู้อะไรเกี่ยวกับ BDD เลย แต่เห็น AngularJS มันใช้ตัวนี้ก็เลยใช้ตาม
ใช้ bcrypt กับ mongodo ด้วยกันบน node.js … ใช้ Q ด้วย
- โปรแกรมนี้ไปเปิด database เอาข้อมูลของ user ชื่อ foo ออกมา
- เสร็จแล้วก็สร้าง password hash โดยที่ไม่ได้เอาข้อมูลของ user มาทำอะไรเลย
… แล้วจะรีบ query มาทำไม -_-!
- เสร็จแล้วก็ save ข้อมูลของ user ที่มี password hash ลงไปใน mongodb แล้วก็ปิดมันซะ
var Q = require('q');
var bcrypt = require('bcrypt-nodejs');
var mongo = require('mongodb'),
Server = mongo.Server,
Db = mongo.Db;
var server = new Server('localhost', 27017, {auto_reconnect: true});
var db_ = new Db('annotedw', server, {safe: true});
var coll_;
var user_;
Q.ncall(db_.open, db_).then(
function(db) {
console.log("OPEN");
return Q.ncall(db.collection, db, 'user');
}
)
.then(
function(coll) {
console.log("COLL");
coll_ = coll;
return Q.ncall(coll.findOne, coll, {'username': 'foo'});
}
)
.then(
function(item) {
user_ = item;
console.log("CALL HASH");
return Q.ncall(bcrypt.hash, bcrypt, "password", null, null);
}
)
.then(
function(hash) {
console.log("HASH", hash);
user_.password_hash = hash;
return Q.ncall(coll_.update, coll_, {_id: user_._id}, user_);
}
).then(
function(update_result) {
console.log("UPDATE RESULT", update_result);
db_.close();
}
)
.fail(
function(error) {
console.log("ERROR", error);
}
);
Q + bcrypt-nodejs
ลองเรียก bcrypt โดยใช้ Q ดู ก็ไม่ยาก ใช้ท่ามาตรฐานได้เหมือนกัน
var Q = require('q');
var bcrypt = require('bcrypt-nodejs');
Q.ncall(bcrypt.hash, bcrypt, "password", null, null)
.then(
function(hash) {
console.log("HASH", hash);
return Q.ncall(bcrypt.compare, bcrypt, "password", hash);
}
)
.then(
function(result) {
console.log("Comparision result:", result);
}
)
.fail(
function(err) {
console.log("ERROR", err);
}
);
MongoDB Node.js และ Q
ผมจะเขียน web app บน Node.js ให้ไปเปิด database ที่ใช้ MongoDB แต่ว่าเขียนไปแล้วงง function ที่มันซ้อนกันอย่างมาก ก็เลยหาตัวช่วยดูอยู่หลายอย่าง สุดท้ายคิดว่าใช้ Q น่าจะง่ายที่สุดก็เลยลองเขียนดู แต่ว่าเป็น command line นะ
var Q = require('q');
var mongo = require('mongodb'),
Server = mongo.Server,
Db = mongo.Db;
var server = new Server('localhost', 27017, {auto_reconnect: true});
var db_ = new Db('annotedw', server, {safe: true});
Q.ncall(db_.open, db_).then(
function(db) {
return Q.ncall(db.collection, db, 'corpus');
}
)
.then(
function(coll) {
return Q.ncall(coll.findOne, coll);
}
)
.then(
function(item) {
console.log(item);
db_.close();
}
)
.fail(
function(err) {
console.log("Error: ", err);
}
);
ผม save ไฟล์ข้างบนไว้ใน mongotry.js
เวลาเรียกก็ใช้ node mongotry.js แล้วก็ได้ผลแบบข้างล่าง
{ _id: 508ec1e02ca65709fc00000c,
corpus_id: 12,
create: Fri Jan 01 2010 00:00:00 GMT+0700 (ICT),
name: 'KIN_1' }
มันก็พิมพ์ข้อมูลออกมา 1 item ตามต้องการ


