Mình có đoạn code java để mã hóa secretkey , mình muốn chuyển nó qua php
Bạn thử như vậy xem nhé:
$message = "{$method}{$space}{$uri}{$newLine}{$timestamp}{$newLine}{$accessKey}";
$hex = hash_hmac('sha256', $message, $secretKey);
$encodeBase64String = base64_encode($hex);
Hỏi về WebSocket
MÌnh đang hiểu là browser của bạn connect vào cái websocket server của bên thứ 3. Khi browser nhận được notifify thì sẽ gửi nội dung đó vào email cho người dùng.
Cách triển khai của bạn nghe nó hơi ngược ngược sao ấy. Việc gửi email sẽ cần thông tin như username, mật khẩu của mail, thì việc này phải do phía server đảm nhiệm chứ sao lại để client handle được nhỉ?
Còn việc bạn connect tới ws server ở browser mình nghĩ khó mà đảm bảo 24/7, thường thì các websocket sẽ có heartbeat làm healthcheck, ví dụ như bạn kết nối mà không làm gì thì ws server sẽ ngắt kết nối, mạng của bạn không ổn định thì cũng sẽ có thể heartbeat fail và ngắt kết nối...
hỏi về cách triển khai project vuejs
1. Chức năng custom ít
Nếu trước mắt, "1 số chức năng" mà bạn đề cập là con số ít và nhỏ, chỉ là fontend function thôi, thì bạn cứ code chung luôn 1 source code, sử dụng environment variable khi deploy để bật/tắt các chức năng tương ứng hoặc đại loại là ý tưởng như vậy. Nếu số lượng nhiều thì chuyển qua tham khảo sang kiểu số 2.
2. Chức năng custom nhiều
Nếu "1 số chức năng" là số lượng lớn và thực sự khác biệt so với phần project còn lại thì tốt nhất mình nghĩ bạn nên tách luôn mỗi project ra một repo riêng để tránh BREAKING CHANGE giữa các project.
Để thuận tiện thì bạn nên tổ chức code thành các package riêng rẽ, và dùng NPM để cài đặt vào các project sử dụng. Lúc này ở từng project bạn chỉ cài package qua NPM và thêm một đoạn code nhỏ để install là xong. Như thế thì việc tái sử dụng code sẽ linh hoạt hơn và không bị breaking change.
Bạn có thể dùng git submodule, hoặc dùng kiểu 2 mình trả lời ở trên. Tách ra thành package thì package đó bạn code gì bên trong cũng được 😃 Ví dụ như cả cái màn quản lý user. =))
Chẳng hạn như Viblo, bọn mình có chức năng đăng nhập, phần backend mình cũng tạo một cái package, tất cả các con service vệ tinh chỉ cần cài nó là có phần đăng nhập, ở frontend cũng có package đăng nhập, cài vào có phần tích hợp đăng nhập với backend.
Hay kiểu như mấy component dùng chung giữa các service như phần User Menu trên thanh Navbar của Viblo, Viblo Code, Viblo Accounts. Để ý bạn sẽ thấy nó đều gần giống nhau, chỉ khác phần link dropdown phía dưới. Đó là component đó được tách ra và đặt vào một package npm để dùng chung đó.
Bạn tham khảo cái: https://bit.dev/ giúp tách các component thành các package để tái sử dụng cho từng dự án. Hoặc bạn đóng gói thẳng thành package NPM cũng được mà.
Làm sao để update dữ liệu từ cột này sang cột khác trong cùng một table ?
Update dữ liệu từ cột này sang cột khác trong cùng một table mình làm trong Postgres thì khá dễ như này, bạn thử xem nhé:
update table_name set col_a = col_b where id = 999;
Nếu không có where
thì nó sẽ update cho toàn bộ row trong table.
JS, CSS trả về xen kẽ 404 or 200
Bạn thử check lại config về cache của Nginx xem. Mình thử thì mỗi lần nó trả về 2 file với nội dung khác nhau.
-
Truy cập lần 1, response là nội dung file hiện tại.
-
Truy cập lần 2, có status là 304, có vẻ là có HTTP Cache nên Nginx lấy từ trong cache storage ra. File cache này là file cũ của lần build trước.
-
Nếu bạn tích chọn Disable cache trong devtool thì dù F5 bao nhiêu lần cũng chỉ có một response duy nhât là 200 với TH truy cập lần đầu.
Do vậy, mình đoán là việc xử lý cache của bạn có vấn đề rồi.
Validation request với Joi trong Express
Xem code bác @HungSmeb bổ sung thì có vẻ đúng như bác @trinhvideo123 nói. Mình cũng đồng quan điểm với @trinhvideo123 như vậy.
- Nếu bác để là
throw CreateError.BadRequest(error.message);
thì app nó sẽ bị dừng tại lệnh throw này gây crash. - Nếu bác để là
next(CreateError(error.message));
thì tức là bạn chuyển cáiexception
sang middleware tiếp theo để Express xử lý tiếp. Cái exception này khi qua middleware tiếp theo thì được trả thành response json như hình.
[MySQL] Làm sao để Select * from Stored procude
Stored Produce là chức năng cho phép bạn lưu lại đoạn SQL Query để bạn có thể tái sử dụng câu truy vấn cho các lần sau bằng cách thực thi StoredProduce.
Trong câu hỏi của bạn có mẫu SQL tạo StoredProduce, bạn sử dụng lệnh EXEC để chạy truy vấn đó sẽ lấy ra được data. Sau đó, có thể insert kết quả này vào bất cứ table nào bạn muốn. Dùng lệnh INSERT như bình thường thôi bạn.
INSERT INTO #YourTempTable VALUES EXEC productpricing;
đọc dữ liệu từ máy chấm công
Theo mình biết thì mỗi thiết bị máy chấm công sẽ có một IP riêng, thường thì bạn truy cập vào IP sẽ vào web server của thiết bị. Từ đó có thể download được dữ liệu chấm công về. Việc download thì chỉ cần gửi HTTP request thôi chứ code không khó. Bạn thử nghiên cứu thêm về thiết bị bạn đang dùng xem sao nhé.
React Native: cách hiển thị ảnh kích thước rất lớn mà không bị giảm chất lượng
Câu hỏi của bạn khá hay. Hay bạn thử chuyển qua đặt ảnh đó thành background xem có ổn hơn không? Đặt ảnh làm background rồi căn chỉnh tọa độ cho phù hợp với vị trí nội dung của lần cuộn tiếp theo. Như vậy thì chất lượng cũng sẽ được đảm bảo hơn.
[PHP] Làm thế nào xử lý 1 vòng lặp for dài bên trong chứa các câu query ?
Bạn nên xây dựng thêm service queue-job riêng để đẩy những nghiệp vụ tốn nhiều thời gian vào queue (hàng đợi) và chạy ngầm. Không biết bạn dùng PHP thuần hay đang dùng framework nào không nhỉ? Như Laravel thì có built-in hệ thống queue-job để dùng luôn rồi.
laravel eloquent query ??
Bạn có thể dùng NOT EXISTS trong SQL theo mẫu dưới đây hoặc dùng whereDoesntHave
trong Query Builder của Laravel.
SELECT users.*
FROM users
WHERE NOT EXISTS (
SELECT id
FROM user_activity
WHERE users.id = user_activity.user_id AND user_activity.created_at >= ?
LIMIT 1
)
$users = User::whereDoesntHave('user_activity', function($query) {
return $query->whereRaw('user_activity.user_id = users.id')
->where('user_activity.created_at', '>=', today()->subDays(30));
});
Mysql convert Mongodb
Bạn dùng thử aggregate
operator xem sao nhé. Câu truy vấn với aggregate
sẽ kiểu như này:
db.TableA.aggregate([
{
"$lookup": {
"from": "TableB",
"localField": "_id",
"foreignField": "id_a",
"as": "dataFromB",
"pipeline": [
{
"$match": {
"ac": 1
}
}
]
}
},
{
"$lookup": {
"from": "TableC",
"localField": "_id",
"foreignField": "id_a",
"as": "dataFromC",
"pipeline": [
{
"$match": {
"ac": 2
}
}
]
}
},
{
"$match": {
"level": 1
}
},
{
$addFields: {
totalB: {
$size: "$dataFromB"
},
totalC: {
$size: "$dataFromC"
}
}
},
{
$project: {
dataFromB: 0,
dataFromC: 0
}
}
])
Output:
[
{
"_id": 1,
"level": 1,
"totalB": 2,
"totalC": 1
},
{
"_id": 2,
"level": 1,
"totalB": 0,
"totalC": 1
}
]
Demo: https://mongoplayground.net/p/DPmpLuHtU2r
Chắc là có nhiều cách truy vấn khác nữa nhưng bạn có thể thử cách này của mình xem sao.
hỏi về sự kiện onbeforeunload
Hình như bạn muốn hỏi các để hiện message hỏi người dùng khi Reload site phải không? Đúng là sẽ dùng window.onbeforeunload
là được đó bạn.
window.onbeforeunload = function (e) {
if (isChanged) {
const message = 'Do you want to leave this page?'
e.returnValue = message
}
}
Về lý thuyết thì trên browser sẽ gắn e.returnValue
để hiện message mình mong muốn. Nhưng thực tế thì với phần custom message trên các browser base trên Chromium đã bị loại bỏ vì vấn đề security.
Xem thêm về report tại: https://bugs.chromium.org/p/chromium/issues/detail?id=587940
Lấy giá trị trong 2 bảng SQL
Mình giả định bạn biết cách thực thi câu truy vấn SQL trong PHP rồi nha. Bạn thực thi 2 câu truy vấn SQL là được nhé:
- Một câu query lấy ra thông tin của 1 product dựa theo ID:
select * from products where prod_id = ?;
- Câu query thứ 2 lấy ra danh sách các product fields:
select * from pro_fields where pro_id = ?;
Trong trường hợp bạn muốn lấy ra danh sách products chứ không phải 1 product như trong câu hỏi trên. Bạn thay phần mệnh đề WHERE sang dùng WHERE ... IN để tối ưu số lượng truy vấn phải thực thi.
select * from products where prod_id in (?, ?, ?);
select * from pro_fields where pro_id in (?, ?, ?);
Sau khi chạy xong 2 câu truy vấn, bạn sẽ chạy vòng lặp trong PHP để nhóm các pro_fields lại theo từng product. Đây cũng là cách để tránh lỗi N + 1 query mà Laravel framework đang áp dụng.
HELP Giúp mình về vị trí trên android với
Cái field "vitri" server họ đang trả về là string chứ không phải JSON Object. Sao bạn không thử confirm đội backend xem có phải họ response nhầm không nhỉ? Nhìn cái value vitri như là một biến được cast sang string âý.
Mà trước khi làm thì bạn nên thống nhất với dev backend về response structure của API đã. Sau đó thì muốn làm gì thì làm =))
this trong class react native
Chính là nó. Đúng rồi đó bạn.
destructuring làm tham số
Mình thấy bạn đặt câu hỏi là destructuring tức là đã biết tới cả tên syntax này rồi mà lại chưa hiểu về nó quả thật phải bái phục, bái phục. Mấy bạn dev có khi viết code theo syntax này suốt mà còn không nhớ nổi tên gọi là gì luôn =))
Syntax này hơi khó giải thích, bạn đọc thử document này nhé, nó có ví dụ cụ thể và mình thấy khá dễ hiểu. Mình cũng đính kèm một bài viết bằng Tiếng Việt trên Viblo, bạn tham khảo nha. Nếu đọc doc xong mà vẫn chưa hiểu thì mình sẽ giải đáp thêm cho bạn.
Làm thế nào lấy tất cả sản phẩm của Shop trong Shopee ?
Mình cũng chưa làm với api của Shopee bao giờ. Nhưng mình thấy có khá nhiều API trong document. Không biết bạn đã đọc cái api này chưa: Product > get_item_list
- https://open.shopee.com/documents?module=89&type=1&id=614&version=2
Ngoài ra cũng có thử inspect xem API mà trang https://shopee.vn gọi thì thấy nó gọi API khác hoàn toàn so với document ở trang trên. Không biết có phải là phải hợp tác thì mới có doc xịn hay không nữa.
Laravel pusher
Mình nghĩ là bạn sẽ cần những thứ sau:
- Database để lưu lại dữ liệu về lịch sử like: ai like cái gì, like khi nào...? Bạn có thể lưu vào MySQL, Postgres, MongoDB... đều được.
- Dựng thêm socket server để làm broadcast notification (realtime). Cái này có thể dùng laravel-echo-server với socket.io hoặc pusher... cũng được.
- Tích hợp laravel-echo-client ở frontend để browser có thể nhận được broadcast notification
Làm thế nào để đăng sản phẩm lên shopee
Sao không vào luôn shopee tạo cho nó nhanh nhỉ?
Nếu bạn muốn có cả thông tin sản phẩm ở website Laravel và cả trên Shopee. Bạn có thể lưu thông tin sản phẩm trong database của Laravel rồi có thêm chức năng đồng bộ dữ liệu qua shopee. Sản phẩm nào đã được đồng bộ thì bạn gắn cái Shopee ID của sản phẩm đó vào record tương ứng trong database của mình.
Việc thêm sản phẩm thì bạn có thể dùng API của Shopee. Bạn xem API Reference tại đây: https://open.shopee.com/
Ngoài ra, nếu muốn dùng API của Shopee thì bạn phải đạt các yêu cầu sau nha:
1.1. Đối với Người Bán
- Tài khoản mà bạn muốn kết nối API phải là tài khoản Shop Yêu Thích hoặc Shopee Mall.
- Bạn phải có lập trình viên để hỗ trợ kết nối API
- Bạn cần có hệ thống quản lý đơn hàng, sản phẩm riêng (Hệ thống phải được lập trình trên website để quản lý đơn hàng, sản phẩm).
- Hệ thống của bạn phải có khả năng kết nối với hệ thống khác.
1.2. Đối với đối tác là bên thứ ba (3rd Party)
- Đối tác cần có giấy phép kinh doanh và website chính thức của công ty.
- Cần cung cấp tải khoản dùng thử và mật khẩu để Shopee kiểm chứng tài khoản trước khi xét duyệt.
Chi tiết xem thêm: https://banhang.shopee.vn/edu/article/8497