Node js có thể dùng sqlite để lưu trữ dữ liệu dạng html không?

Xin hỏi mọi người có thể dùng sqlite để lưu trữ dữ liệu web không?

HTML chỉ là một dạng văn bản. Bạn muốn lưu bao nhiêu cũng được.

Vấn đề là khi lấy ra nó bị lỗi json bạn ạ
Trong php khi lấy dữ liệu ra mình dùng json_encode(). Không biết trong node js có cái hàm nào tương tự như json_encode trong php không?

html như nào lại hàm json_encode()? có 2 hàm trong nodejs là JSON.parse() : chuyển string thành json; JSON.stringify(): chuyển json thành string.
HTML thì bạn lưu trong db ko thành vấn đề, muốn lưu json trong sql database thì dùng postgresql có type JSON cho tiện

làm rồi mà không xong bạn ơi

// GhiChu.findAll({
// attributes: [‘id’,‘noi_dung’]
// }).then(function (ds) {
// //yourJsonText = yourJsonText.Replace("\n","\n");
// var data = {ds:JSON.stringify(ds).Replace(’\n’,’\’)}
// res.render(‘angular_ck/test’, data);
// })

view

        $scope.ds = JSON.parse('<%- ds%>');

SyntaxError: JSON.parse: bad control character in string literal at line 1 column 399 of the JSON data
Stack trace:
@http://localhost:8080/angular_ck/ghi_chu:152:25

Code mình đang sửa nhưng đại khái là thế, json nó không chịu một số ký tự gì đó

Trong php hàm json_encode làm ngon ơ…

Trời ạ, html mà sao lại đi lấy JSON để parse??
Html nó được lưu ở dạng chuỗi văn bản, cứ thế mà lưu thẳng xuống db chứ sao đâu.

Với lại cho mình hỏi, <%- ds%> là cái gì đây?

2 Likes
router.get('/test', function (req, res) {
    // sequelize.sync({force:true})
    // .then(function(){
    //     return  GhiChu.create({noi_dung:'noi dung 1'})
    // })
    // .then(function(){
    //     return  GhiChu.create({noi_dung:'noi dung 222222222222'})
    // })
    // .then(function(){
    //     return  GhiChu.create({noi_dung:'noi dung 333333333333333'})
    // })
    // .then(function(){
    //     return  GhiChu.create({noi_dung:'<p>noi dung 333333333333333</p>'})
    // })
    // .then(function(){
    //     GhiChu.findAll().then(function (ds) {
    //         var data = { ds: ds,url:'/test' }
    //         res.render('angular_ck/test', data);
    //     })
    // })

        GhiChu.findAll().then(function (ds) {
            var data = { ds: ds,url:'/test' }
            res.render('angular_ck/test', data);
        })


});


<% layout('layout1') -%>
<h4>this is test</h4>
<script>
        var url='<%=url%>';
        var app = angular.module('myApp', []);
        app.controller('myCtrl', function($scope,$http) {
            $scope.msg="hello world";
            $scope.ds=JSON.parse('<%- JSON.stringify(ds)%>');
        });
    </script>
    <div ng-app="myApp" ng-controller="myCtrl">
        msg : {{msg}}<br>
        <ol>
            <li ng-repeat="x in ds">{{x.id}} {{x.noi_dung}}</li>
        </ol>

    </div>

this is result

Cái này thì ok nhé

  • Cái lỗi kia xuất hiện khi trong record có field noi_dung chua ký tự \n ( Ký tự này phát sinh trong ckeditor )
  • Nhưng còn ký tự nào gây lỗi nữa thì minh không biết

Codeigniter thì thế này

        $ans=array(
            'ds'=>$ds1,
            'total_row'=>$sodong
        );
        echo json_encode($ans);

nó xử đẹp các ký tự trong ckeditor!!!

Mình nghĩ điểm then chốt là cái json_encode()…node js có không?

Bạn có hiểu mình đang làm gì không vậy

1 Like

Hix, ngồi buồn tìm chiện thảo luận cho vui í mà, có làm phiền bạn không? sorry.

với mình thì không, nhưng thật lãng phí thời gian nếu chăm chăm vào cái giải pháp sai lầm của bạn, thay vì thế bạn đọc kĩ gợi ý của mấy bạn trên tìm hướng đi mới thì hơn

Bạn đưa cả nùi lên thế thì chả ai hiểu đâu, cho mình xem biến ds của bạn là gì nào.

Hix tại bạn ngoại đạo không hiểu ấy

GhiChu.findAll().then(function (ds) {
    var data = { ds: ds,url:'/test' }
    res.render('angular_ck/test', data);
})

Nếu bạn biết sequelize thì hiểu liền à.
Sau khi sequelize chay cái findAll nó sẽ trả về một array ds
có dạng ;
ds=[
{id:1,noi_dung:‘sfsfsfsfsfsfsfsf’},

]

Còn cái tui comment đó là đoạn lệnh kích hoat table + insert vào 4 record

var data = { ds: ds,url:’/test’ }

Sẽ đẩy cái array này ra màn hình view

<%%> : Là các dấu hiệu hứng dữ liêu của ejs template

Càng lúc càng mù tịt không biết bạn muốn làm gì :sweat:
Tốt nhất là debug, debug nodejs và debug trong chrome. Đặt breakpoint vào là biết sai chỗ nào liền. Khi hit breakpoint rồi thì có thể dùng console để quậy dữ liệu.

Có người hiểu ý của tui nè

The error message is telling you that you have a control character within a string literal, for instance, character code 8 or 10 or 13 or anything below 32 (a space).

The JSON definition tells us that you cannot have literal control characters in string literals, you must use an escape sequence such as \b, \r, \n, or \uXXXX where XXXX is a hex code for a Unicode “code point” (character).

So for instance, pretend the following is in a file (or other data stream):

{
“property”: “value with an invalid
control character in it”
}

That’s invalid JSON, the string literal starting with "value has at least one control character in it (the line break, might be one or two control characters depending on the OS).

This is how we would fix it:

{
“property”: “value with an valid\nescape sequence in it”
}

Note the \n where the line break used to be.

Cũng đúng, bản thân mình cũng không hiểu bạn theo đạo nào, không thể hiểu nổi ý tưởng của bạn, không hiểu bạn muốn làm gì.
Nếu theo tầm hiểu biết của mình thì bạn đang thực hiện encode json cho cả đám dữ liệu của form rồi gửi lên server, sau đó sẽ thực hiện logic? Bạn muốn áp dụng theo CI?

HTTP POST và GET là những method cơ bản và nên sử dụng nhất ở tất cả các trường hợp, nó giúp xử lí request nhanh hơn rất nhiều lần so với việc bạn nén dữ liệu bằng json rồi lại giải mã nó. Sao không dùng mặc định mà phải mất công như vậy?

// Tìm hiểu đằng sau thằng JSON nó parse 1 đoạn string không đơn giản tí nào đâu, tốn khá nhiều chi phí đấy.

Cảm ơn bạn cái chữ POST này nhé, để thử lại có được không!!!

Bạn nên xử lý các kí tự lạ bên Frontend hết nhé. Thống nhất 1 kiểu dữ liệu liên lạc là JSON thì dùng JSON.

Case của bạn có truyền dữ liệu không phù hợp với đặc tả JSON thì không nên tạo 1 kiễu dữ liệu truyền khác, như base64, XML.

Lý do xuất hiện các kí tự lạ là do bên client, nên Frontend sẽ xử lý hết các vấn đề này, đừng đem lỗi bên Frontend qua bên Backend, sau này bảo trì mệt luôn.

Về cách lưu HTML, thì bạn nên lưu dưới dạng markdown, và dùng lib chuyển sang. Thư viện nó xử đẹp tất cả kí tự không hợp lệ, invalid HTML. :grin:

Cuối cùng, mình đang chém đó :sob:

2 Likes

Mình thì lại khuyến khích xử lý dữ liệu trước khi lưu xuống database ở backend. Vì để thao tác với db, backend là thằng trực tiếp làm việc với nó. Nên mình k tin tưởng bố con nào khác làm việc đó cả :smile: vì “bọn client” rất ranh :))

2 Likes

Có cái này hay nè

function escape (key, val) {
    if (typeof(val)!="string") return val;
    return val
      //.replace(/[\"]/g, '\\"')
      //.replace(/[\\]/g, '\\\\')
      //.replace(/[\/]/g, '\\/')
      //.replace(/[\b]/g, '\\b')
      //.replace(/[\f]/g, '\\f')
      .replace(/[\n]/g, '\\n')
      .replace(/[\r]/g, '\\r')
      .replace(/[\t]/g, '\\t')
    ; 
}
//var myJSONString = JSON.stringify(myJSON,escape);

Nó làm việc giống json_encode trong PHP, xử lý các ký tự không mong muốn, các ký tự invalid của json

ở client chỉ việc parse lại chuyển thành object và view…

1 Like

hi, thank you, tiên hạ thủ vi cường :joy:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?