javascript - Memahami cara menggunakan NodeJS untuk mencipta backend yang mudah
Saya telah mencuba untuk membangunkan server yang agak mudah dalam nodejs. Pada dasarnya, apa yang saya mahukan ialah API yang mudah yang memerlukan pengesahan (gaya nama pengguna/kata laluan yang mudah). Apa yang saya tidak perlukan ialah sebarang fungsi frontend (templating dan sebagainya). Masalah saya ialah, saya nampaknya tidak dapat memahami pendekatan express/node.
Secara khusus, soalan saya adalah:
- Bagaimana saya menyambungkan pengesahan? Adakah saya perlu menghantar beberapa pengendali ke setiap laluan yang memerlukan pengesahan, atau adakah terdapat cara yang lebih elegan untuk melakukan ini?
- Bagaimana middleware Express (seperti
app.use(express.bodyParser())) berfungsi? Adakah ia mengubah kandungan objekrequestatauresponse? Secara khusus, jika saya menggunakan body parser (secara dalaman formidable?), di mana saya boleh mengakses data permintaan yang sepatutnya diparse oleh ini? - Apabila menggunakan pengesahan dan saya mempunyai, katakan, kelayakan yang disimpan dalam pangkalan data dengan lebih banyak maklumat mengenai pelanggan individu yang berkaitan, pada tahap apa saya mengekstrak maklumat itu? Iaitu, apabila pengguna log masuk, adakah saya mengambil rekod pengguna semasa log masuk dan meneruskannya, atau adakah saya mengambilnya dalam setiap pengendali yang memerlukan maklumat itu?
- Akhirnya, adakah anda mengetahui sebarang aplikasi sumber terbuka yang boleh saya lihat? Saya ingin melihat sesuatu yang mempunyai pengesahan yang mudah dan mungkin juga menggunakan formidable, kerana memuat naik fail adalah salah satu keperluan saya.
Seperti yang saya nyatakan sebelum ini, saya percaya masalah saya pada akhirnya ialah kesukaran dengan pendekatan berorientasikan fungsi dalam node (juga, saya mempunyai pengalaman yang agak terhad dalam pengaturcaraan perkhidmatan web). Jika anda mengetahui sumber di mana saya boleh membaca mengenai cara mendekati penyusunan seni bina aplikasi nodejs, sila jangan teragak-agak untuk menunjukkannya kepada saya.
Jawapan #1
Bagaimana saya menghubungkan pengesahan? Adakah saya perlu menyampaikan beberapa pengendali ke setiap laluan yang memerlukan pengesahan, atau adakah terdapat cara yang lebih elegan untuk melakukannya?
Anda perlu menggunakan middleware sesi. Berikut adalah beberapa kod pseudo:
var http = require('http');
var app = express();
var authorize = function(req, res, next) {
if(req.session && req.session.appname && req.session.appname === true) {
// redirect to login page
return;
}
next();
}
app.use(express.session());
app.all('/admin*', authorize, function(req, res, next) {
});
Bagaimana middleware Express (seperti app.use(express.bodyParser())) berfungsi? Adakah ia mengubah kandungan objek permintaan atau respons? Secara khusus, jika saya menggunakan body parser (secara dalaman formidable?), di mana saya boleh mengakses data permintaan yang sepatutnya diparse ini?
Setiap middleware mempunyai akses kepada objek permintaan dan respons. Jadi, ya, ia mengubahnya. Biasanya melampirkan sifat kepadanya. Ini bermakna bahawa di dalam pengendali anda (yang juga merupakan middleware) anda mungkin menulis:
if(req.body && req.body.formsubmitted && req.body.formsubmitted === 'yes') {
var data = {
title: req.body.title,
text: req.body.text,
type: req.body.type
}
// store the data
}
Apabila menggunakan pengesahan dan saya mempunyai, katakan, kelayakan yang disimpan dalam pangkalan data dengan lebih banyak maklumat tentang pelanggan individu yang berkaitan, pada tahap mana saya mengekstrak maklumat itu? Iaitu, apabila pengguna log masuk, adakah saya mengambil rekod pengguna semasa log masuk dan meneruskannya, atau adakah saya mengambilnya dalam setiap pengendali yang memerlukan maklumat itu?
Saya rasa anda harus melakukan perkara-perkara dengan cara yang sama seperti dalam mana-mana bahasa sisi pelayan lain. Simpan keadaan pengguna (log masuk/tidak log masuk) dalam sesi. Anda juga boleh menyimpan ID pengguna dan mendapatkan data untuknya apa sahaja yang anda perlukan. Ia bergantung pada kes anda, tetapi anda mempunyai keupayaan untuk menyimpan maklumat dalam cache. Kerana node tidak seperti PHP contohnya, maksud saya ia tidak mati.
Akhirnya, adakah anda mengetahui aplikasi sumber terbuka yang boleh saya lihat? Saya ingin melihat sesuatu yang mempunyai pengesahan yang mudah dan mungkin juga menggunakan formidable, kerana memuat naik fail adalah salah satu keperluan saya.
Ya. Saya menulis artikel mengenai laman web MVC yang sangat mudah dengan panel pentadbir. Ia boleh didapati di sini. Dan kodnya boleh didapati di sini.
Jawapan #2
Cara mudah untuk melaksanakan pengesahan (jika anda tidak mahu menggunakan modul tambahan):
var checkAuth = function(req, res, next) {
if(!req.session.user)
{
// Redirect to login form
res.redirect("/login");
}
else
{
// Proceed to member's area
next();
}
};
app.get("/member/page", checkAuth, function(req, res) {
// render view, etc
});
bodyParser menganalisis/menukar badan permintaan POST menjadi objek, yang membantu mendapatkan nilai penghantaran borang.
Laluan yang mengendalikan penghantaran borang log masuk anda boleh mengakses nama pengguna/kata laluan seperti ini:
var username = req.body.username;
var password = req.body.password;
Pada masa ini anda akan menyoal pangkalan data anda untuk memilih daripada pengguna di mana nama pengguna dan kata laluan sepadan (anda ingin menggunakan penyulitan kata laluan dalam persekitaran pengeluaran).
Jika anda mendapat rekod kembali dalam keputusan pertanyaan, tetapkan ia dalam sesi. Cara mudah untuk melakukan ini adalah:
req.session.user = userRecord
(Laraskan untuk perisian pertengahan sesi anda)
