01/10/2018, 11:13

Node js full url ra dữ liệu không mong muốn

Hi, anh chị em
Tại sao trong node js mình get full url như sau

var fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;  
console.log(fullUrl);

Sao nó ra một đống thế này
http://localhost:8080/welcome/test1
http://localhost:8080/welcome/css_united.css
http://localhost:8080/welcome/js/bootstrap.min.js
http://localhost:8080/welcome/js/jquery.min.3.2.1.js
http://localhost:8080/welcome/js/angular.min.1.6.3.js

làm sao xử lý chỉ lấy dòng đầu.
Mong cao nhân chỉ giáo, thk

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

Thêm thông tin đi bạn, ít nhất cũng cho đoạn route hoặc vòng lặp bạn cho cái dòng console.log kia chứ để mỗi 2 dòng thế ai mà fixx nổi cho bạn

Thuc Nguyen Tan viết 13:15 ngày 01/10/2018
    app.use(function (req, res, next) {//luon luon chay truoc khi thay doi path
var fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;  
//var fullUrl = req.protocol + "://" + req.headers.host + req.baseUrl;
//console.log(req.protocol + '://' + req.get('host')); 
//console.log(fullUrl);
var url = require('url');
var parsedUrl = url.parse(fullUrl, true, true);
console.log({
    path:parsedUrl.path,
    hash:parsedUrl:hash,
})
data.base_url=req.protocol + '://' + req.get('host');
if (!req.session.level) { req.session.level = 0 }
if (!req.session.user_id) {//chua dang nhap
    data.logged = 0;
} else {
    data.logged = 1;
}
next();

});

đoạn này dùng để check tất cả url đi vào

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

Bạn cần cho biết mục đích lấy url là gì, bởi vì việc bạn dùng route lấy toàn bộ request sau đó chọn 1 request là việc rất ba chấm, các request không liên quan tới nhau, nó không nằm trong mảng nào cả, việc tách ra rất khó.

  • Dùng 1 biến dạng static array (nếu như node.js support) để lưu lại số lần request từ client đó, lưu các url đó vào mảng static đó, khi hết request sẽ lấy url đầu tiên từ mảng đó, cuối cùng là tiến hành set array đó về null/empty
  • Bạn nên thay đổi cách thức khác để lọc request
Thuc Nguyen Tan viết 13:19 ngày 01/10/2018

Mình muốn tách các tham số

http://localhost:8080/welcome/test1 ----> welcome test1
http://localhost:8080/welcome/test2 ----> welcome test2
http://localhost:8080/welcome/test3 ----> welcome test3
http://localhost:8080/welcome/test4 ----> welcome test4

thế thôi

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

route của bạn lấy tất cả request đầu vào, vậy nên không thể tách đơn giản được, giải pháp là move các request của resource file stream sang /media/ hoặc bất cứ thứ gì bạn muốn, sau đó regex url của nó.
Ngoài ra chắc bạn cần chọn giải pháp khác, không map toàn bộ url nữa

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

Giả sử route được khai báo:
app.get(’/:module/:id’);

req.params: {module: “welcome”, id: “test”}
lấy các tham số động trong ngoặc kép

req.path: “/welcome/test”
Lấy path của url

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

app.get (’/:class/:fn’,function(req,res){…});
có tương đương không?

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

Sorry, mình nhầm, bạn viết đúng rồi
Nhầm bên NestJS

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

Hix vô tình mà giải quyết được cái lỗi này rồi, note lại đễ khi có ai cần

Vào cái chỗ layout, thêm dấu / vào tất cả các js, css…
ví dụ:

<head>
    <title>
        <%= data.title %>
    </title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <link rel="stylesheet" href="/css_united.css">
    
    <script src="https://daynhauhoc.com/js/bootstrap.min.js"></script>
    <script src="https://daynhauhoc.com/js/jquery.min.3.2.1.js"></script>
    <script src="https://daynhauhoc.com/js/angular.min.1.6.3.js"></script>
</head>

app.use(function (req, res, next) {//luon luon chay truoc khi thay doi path

    console.log(req.path);

    //var fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl; 
    //const url = require('url')
    //var myURL=new url(fullUrl);
    //console.log(myURL);
    //const urlObj = url.parse(fullUrl,true)
    //console.log(urlObj.hash) // #some/url
    //var q = url.parse(adr, true);

    // const { URL } = require('url');
    // const myURL = new URL('https://example.org:8888');
    // console.log(myURL.port);
    //console.log(req.baseUrl);

    data.base_url=req.protocol + '://' + req.get('host');
    if (!req.session.level) { req.session.level = 0 }
    if (!req.session.user_id) {//chua dang nhap
        data.logged = 0;
    } else {
        data.logged = 1;
    }
    next();
});

app.use(function (req, res, next){…});
là nơi tuyệt vời để check các path đầu vào và khởi động biến của node js express …

Một ví dụ hữu ích như sau

Khai báo global:

app.locals.cur_path="";

Kích hoat

app.use(function (req, res, next) {//luon luon chay truoc khi thay doi path
    //console.log(req.path);
    cur_path=req.path;

use in controller

var express = require('express')
    , router = express.Router()

router.get('/', function (req, res) {
    console.log(cur_path);//happy here
    var data= {title:"cars pager",pager:"this is cars",hor_select:req.originalUrl}
    res.render('cars/index', data );
})
Bài liên quan
0