• RE: Kiểm tra điều kiện đăng nhập

    alt text

    posted in General Discussion
  • RE: lổi nodejs heroku

    @Channel-oz-Music Có thể do bạn đạng fix port khi tạo server. Khi deploy lên Heroku thì nó muốn set 1 port Dynamic cho bạn thông qua biến môi trường PORT, và yêu cầu bạn sử dụng port này.

    Để làm việc này thì bạn sửa lại code, đoạn listen như sau:

    var express = require('express');
    var app = express();
    
    // đoạn lấy PORT từ biến môi trường sẽ do Heroku quyết định
    var port = process.env.PORT || 3000;
    app.listen(port);
    
    posted in General Discussion
  • RE: Lỗi: Can't set headers after they are sent.

    SQL query của bạn là ko đồng bộ, vậy nên bạn cần phải đợi nó thực hiện xong mới response về cho User, như code trên là bạn chưa biết là query có thực hiện hay không đã return res.redirect("/main"); về cho user rồi? Bạn đưa đoạn code vào bên trong hàm callback nhé.

    app.get("/test/:user", function(req, res) {
    var user = req.params.user;
    var sql = "SELECT * FROM test_user WHERE user = ?";
        conn.query(sql, [user], function(err, result) {
            if(err) throw err;
            if(result.length > 0) {
                if(result[0].level != 3) {
                    req.flash("message", "Tài khoản không đủ level");
                    return res.redirect("/");
                }
            }
            else {
                //...
            req.flash("message", "success");
            return res.redirect("/main");
            }
        });
        //...
    
    });
    
    posted in Discuss Node.JS
  • RE: expired token jwt mỗi khi user login

    @Đức-Trần Theo mình biết thì khi mỗi jwt được issued ra thì bản thân nó chỉ hết hạn khi thời gian hiện tại lớn hơn khoảng thời gian hiệu lực của token. Để làm được việc này thì theo mình là thay đổi cách implement của OAuth Server bằng cách bổ sung thêm trường isRevoked hoặc cập nhật trường expires = today - 1, hoặc delete các tokens đó khỏi DB đi. Khi validate thì cần kiểm tra token đó có tồn tại trong DB hay không và các điều kiện khác hợp lệ.

    posted in General Discussion
  • RE: Làm thế nào ngăn member viết những đoạn code nguy hiểm trên system

    @Quang-Vu-Quang Như trên là mình có giới thiệu tới vm2 là an toàn cho việc chạy các đoạn mã unstrusted của user.

    Việc còn lại là cách thiết kế của bạn, trên trang github của vm2 có giới thiệu 1 đoạn mã như này mình thấy khá ổn. Bạn xem api sandbox, mock của NodeVM có bind được với các function do user viết ko?

    const {NodeVM} = require('vm2');
    
    const vm = new NodeVM({
        console: 'inherit',
        sandbox: {},
        require: {
            external: true,
            builtin: ['fs', 'path'],
            root: "./",
            mock: {
                fs: {
                    readFileSync() { return 'Nice try!'; }
                }
            }
        }
    });
    
    // Sync
    
    let functionInSandbox = vm.run("module.exports = function(who) { console.log('hello '+ who); }");
    functionInSandbox('world');
    
    // Async
    
    let functionWithCallbackInSandbox = vm.run("module.exports = function(who, callback) { callback('hello '+ who); }");
    functionWithCallbackInSandbox('world', (greeting) => {
        console.log(greeting);
    });
    
    posted in General Discussion
  • RE: Làm thế nào ngăn member viết những đoạn code nguy hiểm trên system

    @Quang-Vu-Quang Bạn đánh giá lại việc có nên cho phép chạy mã ở server ko thì cho phép user gọi API thôi. Nếu vẫn muốn cho user chèn mã dạng plugins thì tìm hiểu về Sandbox xem, nếu triển được thì xem như an toàn tuyệt đối.

    Mình search qua thì có 2 module cho phép làm việc này:

    posted in General Discussion
  • RE: Lỗi port in use trong nodejs express

    @Quy-Tran @phatht Trên Windows bạn có thể tìm ứng dụng nào chiếm port X bằng lện này, ví dụ: X = 80

    netstat -abno -p tcp | find "80"

    Chú ý lệnh này phải chạy CMD với quyền Administrator.
    Tham khảo:
    http://how.vndemy.com/software/104-huong-dan-kiem-tra-ung-dung-su-dung-cong-80-tren-windows/

    posted in General Discussion
  • RE: Lỗi port in use trong nodejs express

    @phatht Trong lúc lỗi thì bạn có vào được dịch vụ theo port đó ko? Có thể app của bạn vẫn chạy, nhưng pm2 mất trạng thái quản lý của ứng dụng.

    posted in General Discussion
  • Giới thiệu Kites Framework

    Thi đua phong trào nhà nhà, người người viết Web Framework nên mình cũng hào hứng đóng góp 1 sản phẩm mới mang tên Kites. Rất mong các bạn dùng thử và trải nghiệm sản phẩm thú vị này.

    Giới thiệu Kites

    Kites là một dự án mã nguồn mở với mục tiêu là tạo ra các ứng dụng Web dựa trên các bản mẫu dựng sẵn một cách nhanh chóng và dễ dàng.

    Như vậy, sử dụng kites để tạo ra một loạt các sản phẩm web như:

    • Web MVC Application
    • Content Management System (CMS)
    • Restful API
    • Express Application
    • Single Page Application (SPA)
    • Video Call Application
    • AI Chatbot Application
    • ... xem thêm ở đây

    Ví dụ tạo ra 1 dự án MVC bằng lệnh như sau:

    npm install -g @kites/cli
    
    kites init my-project --template mvc
    
    cd my-project
    npm install
    npm start
    
    # Truy cập web tại link http://localhost:3000
    

    Sơ lược qua về kỹ thuật thì kites tự động phát hiện các extensions đã được install trong thư mục node_modules, do đó, khi khởi chạy các phần mở rộng này được nạp tự động, một chương trình đơn giản nhất trông như thế này:

    'use strict'
    const engine = require('@kites/engine');
    
    /**
     * minimalist kites application
     */
    engine({
            loadConfig: true,
            discover: true
        })
        .init()
        .then((kites) => {
            kites.logger.info('Hello world!');
        })
        .catch((e) => {
            console.error(e.stack);
            process.exit(1);
        })
    

    Mục tiêu của dự án Kites

    • Là 1 framework tạo ra các ứng dụng web đầy tham vọng
    • Là 1 công cụ dòng lệnh, hỗ trợ khởi tạo nhanh dự án
    • Kết nối với tất cả các loại cơ sở dữ liệu: MongoDB, Cassandra, MySQL, Postgres, Redis, …
    • Mô-đun hóa các thành phần, tiện ích tái sử dụng thành các phần mở rộng (extensions)
    • Phân tách tầng ứng dụng: device access layer, database access layer, cron jobs, …
    • Đóng gói các dự án cơ sở thành khuôn mẫu (templates)
    • Mỗi một khuôn mẫu đều có Dockerfile và docker-compose
    • Tích hợp với các dự án, module khác mà không gây ra xung đột

    Templates - Các khuôn mẫu dự án dựng sẵn

    Những mục tích là đã thực hiện xong, dev có thể cài khởi tạo template bằng cách sử dụng @kites/cli

    Ví dụ tạo một ứng dụng Kites MVC như sau:

    npm install -g @kites/cli
    kites init my-project --template mvc
    
    • [x] mvc: Assembling all into complete ship (default), nodevn/kites-template-mvc
    • [x] basic: Template for building from scratch (default, current)
    • [x] apidoc: Template for API Documentation, nodevn/kites-template-apidoc
    • [x] express: Template for Express Application, nodevn/kites-template-express
    • [ ] restful: Template for generating a RESTful API Server, nodevn/kites-template-restful
    • [ ] spa: Template for generating a Single Page Application (SPA)
    • [ ] cms: Template for generating a Content Management System (CMS)
    • [ ] chat: Template for generating a Chat application
    • [x] chatbot: Template for generating an AI Chatbot application, vntk/chatbot, document
    • [ ] videocall: Template for generating a Video Call application

    Cấu trúc thư mục của dự án

    Với Kites MVC thì em nó có bố cục thư mục như thế này

    Kites MVC

    Rất mong 1 ngày anh em sử dụng đến Kites. :D
    Thanks!

    posted in Showcase - Open Source