无法通过express获取url后面的参数值,请前辈们指点

我想获取以下url的参数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向后台发送请求

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的值从数据库调取文章,但不知道为什么无法读取http://localhost:8090/后面的参数了

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:已经在主服务器使用了body-parser

阅读 2.5k
2 个回答

在express 4.0 版本里
1、首先先检查你是否设置了 body-parser 中间件解析请求体

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

若有设置,获取仍然无效,那么请往下看第二种方法。

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);  // 对参数进行解码
    val[left] = right;  // 返回对象数组
 }
//     例如 articlePageId=1&limit=4
//  返回   { articlePageId: 1, limit: 4 }

可参考官方文档:http://expressjs.com/en/4x/ap...

或直接用函数解决

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);

app.use(express.bodyParser());

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题