01/10/2018, 11:48

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?

明玉 viết 14:00 ngày 01/10/2018

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

Thuc Nguyen Tan viết 14:03 ngày 01/10/2018

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?

Đào An viết 13:59 ngày 01/10/2018

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

Thuc Nguyen Tan viết 13:52 ngày 01/10/2018

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 ơ…

明玉 viết 14:02 ngày 01/10/2018

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?

Thuc Nguyen Tan viết 13:56 ngày 01/10/2018
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?

Quân viết 13:58 ngày 01/10/2018

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

Thuc Nguyen Tan viết 13:48 ngày 01/10/2018

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.

Quân viết 13:51 ngày 01/10/2018

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

明玉 viết 13:50 ngày 01/10/2018

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.

Thuc Nguyen Tan viết 14:00 ngày 01/10/2018

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

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

明玉 viết 13:52 ngày 01/10/2018

Càng lúc càng mù tịt không biết bạn muốn làm gì
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.

Thuc Nguyen Tan viết 13:57 ngày 01/10/2018

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.

Dark.Hades viết 13:56 ngày 01/10/2018

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

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.

Thuc Nguyen Tan viết 13:52 ngày 01/10/2018

POST

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

Hung viết 13:59 ngày 01/10/2018

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.

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

Zhang Jike viết 14:04 ngày 01/10/2018

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ả vì “bọn client” rất ranh :))

Thuc Nguyen Tan viết 13:50 ngày 01/10/2018

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…

Thuc Nguyen Tan viết 14:02 ngày 01/10/2018

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

Bài liên quan
0