鍍金池/ 問答/網(wǎng)絡(luò)安全  HTML/ 無法通過express獲取url后面的參數(shù)值,請前輩們指點

無法通過express獲取url后面的參數(shù)值,請前輩們指點

我想獲取以下url的參數(shù)articlePageId的值,但試過好幾種方法無法獲取,到這邊求助各位前輩,希望能抽空指點一下,謝謝??!

https://localhost:8090/articlePage.html?articlePageId='+item.ID

console.log(fullUrl)      // http://localhost:8090/
console.log(req.path)     // /
console.log(req.params)   // {}
console.log(req.query.articlePageId)  // undefined

articlePageId.html,鏈接到達這個頁面,通過vue-resource向后臺發(fā)送請求

window.onload = () => {
      const vm = new Vue({
        el: '#app',
        data: {
          dataGroup: [],
        },
        methods: {
          renderArticle() {
            this.$http.get('/', {

            }).then((res) => {
              this.dataGroup = res.data;
            }, (res) => {
              alert(res.status)
            })

          },
        },
        created() {
          this.renderArticle('/')

        }
      })
    }

后臺接收get請求,本來是希望分析url提取articlePageId的值從數(shù)據(jù)庫調(diào)取文章,但不知道為什么無法讀取http://localhost:8090/后面的參數(shù)了

router.use('/articlePage',(req,res)=>{
  
    db.query(`SELECT * FROM articles_table WHERE ID='${pageId.id}'`,(err,page)=>{
      if(err){
        console.error(err);

        res.status(500).send('database error').end();
      }else{
        res.send(page);
      }
    })

  })

Ps:已經(jīng)在主服務(wù)器使用了body-parser

回答
編輯回答
你的瞳

app.use(express.bodyParser());

2017年5月18日 14:03
編輯回答
晚風眠

在express 4.0 版本里
1、首先先檢查你是否設(shè)置了 body-parser 中間件解析請求體

const bodyParser = require('body-parser');
app.use(bodyParser.json());  
app.use(bodyParser.urlencoded({ extended: false }));

若有設(shè)置,獲取仍然無效,那么請往下看第二種方法。

2、我建議使用originalUrl進行匹配。

  const path = req.originalUrl;  // /articlePage.html?articlePageId=id
  const queryUrl = path.strsub(path.indexOf('?')+1); // articlePageId=id
  const lines = queryUrl.split('&');
  const val = {};
  for (const line of lines) {
    let [left, right] = line.split('=');
    right = decodeURIComponent(right);  // 對參數(shù)進行解碼
    val[left] = right;  // 返回對象數(shù)組
 }
// ????例如 articlePageId=1&limit=4
//  返回   { articlePageId: 1, limit: 4 }

可參考官方文檔:http://expressjs.com/en/4x/ap...

或直接用函數(shù)解決

function getKeyValue(url) {
    let result = {};
    let reg = new RegExp('([\\?|&])(.+?)=([^&?]*)', 'ig');
    let arr = reg.exec(url);

    while (arr) {
        result[arr[2]] = arr[3];

        arr = reg.exec(url);
    }

    return result;
}

const path = req.originalUrl;
getKeyValue(path);

2018年1月12日 21:43