@Kha-Pham
Bạn cần thêm async phía trước callback như sau:
usersModel.findOne(..., async
(err, data) => {...});
Best posts made by Quy Tran
-
RE: Hỏi về async await
-
RE: Hỏi về test socket io bằng Postman
HIện tại postman chưa hỗ trợ websocket nhé. Bạn tìm chrome extention để test. https://chrome.google.com/webstore/detail/smart-websocket-client/omalebghpgejjiaoknljcfmglgbpocdp?utm_source=chrome-app-launcher-info-dialog
-
RE: Khai báo mảng 2 chiều trong nodejs
Here you are:
const allClasses = []; const it1 = ['nguyen v a', 'nguyen v b']; const it2 = ['nguyen v c', 'nguyen v d']; allClasses.push(it1, it2); console.log(allClasses[0][0]); //print 'nguyen v a' console.log(allClasses[1][1]); //print 'nguyen v d'
in 1 statement:
const allClasses = [ ['nguyen v a', 'nguyen v b'], ['nguyen v c', 'nguyen v d'] ]; console.log(allClasses[0][0]); //print 'nguyen v a' console.log(allClasses[1][1]); //print 'nguyen v d'
Bạn chỉ cần hiểu mảng 2 là 1 mảng 1 chiều mà mỗi phần tử lại là 1 mảng 1 chiều.
-
RE: Hỏi về cách return giá trị?
@Kha-Pham Nếu bạn đang dùng NodeJS 8+, bạn có thể dùng async/await
var info = await sharp(imageFile.data) .resize(700) .jpeg() .toFile('./public/images/images/700_'+slug+'.jpg'); var image = { width: info.width, height: info.height, url: 'images/images/700_'+ slug + '.jpg', webpUrl: 'images/images/700_'+ slug + '.webp', }
NodeJS < 8 thì dùng Promise
return new Promise((resolve, reject) => { sharp(imageFile.data) .resize(700) .jpeg() .toFile('./public/images/images/700_'+slug+'.jpg', function(err, info) { if (err) { reject(err); } resolve({ width: info.width, height: info.height, url: 'images/images/700_'+ slug + '.jpg', webpUrl: 'images/images/700_'+ slug + '.webp', }); }); })
Bạn nên học thêm về khái niệm về async/await và promise trong JavaScript trước.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function -
RE: Làm thế nào để start nodejs ? nghiên cứu source code API service có sẵn
@Bang-Panpic file dist/server.js là file đã được đóng gói và minify.
npm run start
là lệnh của npm. Nó sẽ chạy lệnh tương ứng định nghĩa trong package.json
NODE_ENV=production node dist/server.js
. Cách chạy này đúng, không có gì sai. Trước khi tìm hiểu nodejs thì bạn nên học những kiến thức cơ bản về nodejs trước đã. -
RE: Lỗi port in use trong nodejs express
@phatht Như gởi ý của bạn @Vũ là đúng rồi đó. Lỗi này thông thường là do một process nào đó đã chiếm port. Trên máy window hay bị lỗi này, bạn cần phải check kỹ xem process nào đang chiếm port đó. Máy window của đồng nghiệp mình cũng hay bị trường hợp này.
-
RE: Hàm Find trong mongoose
UserModel.find({...}, (err, results) => { if (results.length) { // do something. } });
-
RE: Mình vừa mới tìm hiểu redux-saga có một số vấn đề chưa hiểu?
@Kha-Pham :
Object.assign sao chép thuộc tính của object state sang object {'username': 'ok'}. Nhưng cũng chỉ copy bình thường. -
RE: [Hỏi] Nếu thay đổi url request trong 1 middleware nào đó thì các middleware khác không được nhảy đến
@Vũ Không cần dùng router
app.get('/default-page', function (req, res) { let content = JSON.stringify(config); res.send('default page'); }); app.use(function (req, res, next) { req.url = '/default-page'; app.handle(req, res, next); // <--- here });
Quan trọng là 2 dòng
req.url = '/default-page'; app.handle(req, res, next);
Latest posts made by Quy Tran
-
RE: Xin hướng dẫn cài source: https://github.com/dkakashi69/Echo trên VPS centos
@Trần-Khánh Bạn xem hướng dẫn trong bài viết này: https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-centos-7
Bài viết tương tự bằng tiếng việt nhưng trên UBUNTU
https://int3ractive.com/2017/09/huong-dan-cai-dat-nodejs-app-len-vps-phan-1.html?fbclid=IwAR0NVzTQkScaItbva1dtAQrNIBnSy-XtqKD6UcWm03r4ISg4FWOjl75WCkg -
RE: Cách xử lý đoạn code bất đồng bộ khi call stored procedures sql server
import { sequelizeCameraDetect } from '../sequelize' import { TYPES } from 'tedious'; import { Request } from 'tedious'; import { connection } from '../app' const getListClusterCamera = async (data) => { try { const promisedResult = new Promise((resolve, reject) => { let request = new Request(`usp_ClusterCamera_List`, function (err) { if (err) { console.log(err); } }); request.addParameter('Page', TYPES.Int, data.Page); request.addParameter('PageSize', TYPES.Int, data.PageSize); request.addParameter('Name', TYPES.NVarChar, data.Name); request.addParameter('Status', TYPES.Int, data.Status); request.addParameter('OrderBy', TYPES.VarChar, data.OrderBy); request.addParameter('SortBy', TYPES.VarChar, data.SortBy); request.addOutputParameter('Total', TYPES.Int); let result = {} result.data = [] request.on('returnValue', (Total, value, metadata) => { return result.total = value }); request.on('doneInProc', (rowCount, more, rows) => { if (rows.length > 0) { rows.forEach(e => { result.data.push({ Id: e.Id.value, Name: e.Name.value, CreatedDate: e.CreatedDate.value, Status: e.Status.value, CameraType: e.CameraType.value }) }); } console.log(result); resolve(result); }) request.on('error', (err) => reject(err)); connection.callProcedure(request); }) return promisedResult; } catch (error) { return error } } module.exports = { getListClusterCamera }
-
RE: Hỏi về test socket io bằng Postman
HIện tại postman chưa hỗ trợ websocket nhé. Bạn tìm chrome extention để test. https://chrome.google.com/webstore/detail/smart-websocket-client/omalebghpgejjiaoknljcfmglgbpocdp?utm_source=chrome-app-launcher-info-dialog
-
RE: [Hỏi] Nếu thay đổi url request trong 1 middleware nào đó thì các middleware khác không được nhảy đến
@Vũ Không cần dùng router
app.get('/default-page', function (req, res) { let content = JSON.stringify(config); res.send('default page'); }); app.use(function (req, res, next) { req.url = '/default-page'; app.handle(req, res, next); // <--- here });
Quan trọng là 2 dòng
req.url = '/default-page'; app.handle(req, res, next);
-
RE: Vấn đề performance của nodejs khi truy vấn với csdl trong vòng for
@Thien-Anh Gọi 1 hay nhiều không quan trọng lắm. Điểm quan trọng là lấy đúng dữ liệu mình cần ở client là ok, không gọi dư thừa hay bị trùng lắp là Ok. Phía NodeJS server thì cách tiếp cận tốt là vẫn bất đồng bộ. Khi có quá nhiều request thì mình sẽ scale hệ thống.
Việc truy vấn database để tối ưu bạn cần lưu ý:
- Chỉ lấy những column nào mình cần
- Sử dụng connection pool để tối ưu số lượng connection
- Dùng transaction khi thực hiện nhiều query cho cùng 1 task.
-
RE: Gặp vấn đề khi IO.CONNECT có SSL đến một máy chủ IP khác
@Trần-Đức-Nhật ssl cert của bạn tự tạo hay bạn mua từ dịch vụ cung cấp ssl cert? Nếu bạn không có ssl cert từ nhà cung cấp dịch vụ. Bạn có thể đăng ký free ssl từ https://letsencrypt.org/
-
RE: Gặp vấn đề khi IO.CONNECT có SSL đến một máy chủ IP khác
@Trần-Đức-Nhật Nếu bạn dùng https, thì bạn phải kết nối bằng domain name, không dùng ip. Trong môi trường development thì có thể dùng "requestCert: false" để bỏ qua việc check https. Nhưng khi lên production bạn nên dùng domain name để kết nối. vdu: mydomain.vn. thì code sẽ là:
var socket = io.connect('https://mydomain.vn' , { transports: ['websocket'] } );
-
RE: Pm2 event catch
@Thái-Bình-La : "mỗi lần server autorestart sẽ gửi mail", yêu cầu này thì khó.
Nhưng để log ra thì dễ, bạn có thể xem error log của pm2. Thông thường nó nằm trong thư mục ~/.pm2.
Có 1 vài cách để monitor server:- Dùng monitoring tool, đơn giản thì có monit, phức tạp dùng Prometheus
- Tự viết logic để send email mỗi lần app start lại