2017-12-13 11 views
2

エクスプレス(他のパッケージなし)のノードのみを使用して、10エントリのページで結果を提供する必要があるサーバー側としてAPIを構築しAPIを構築する必要があります。エクスプレスでのノードページング

  • クエリパラメータpパラメータが省略された場合は、1から始まる、返すようにページp指定し、デフォルト値は1
  • あるクライアント側は/api/stories?p=1を要求した場合、彼らは唯一の10を取得する必要があります最新のものから始まる物語。

  • p=2の場合、APIは10階建ての2番目のバッチを返す必要があります。 ストーリーのページが返されたときは、最新のストーリーを最初に注文する必要があります。

  • pが最後のページ番号より大きい場合、APIは最後に使用可能なページを返す必要があります。

  • pageの値は、現在返されているページです。要求されたページpが最後のページ番号より大きい場合、返されたpageの値は最後のページ番号を示します。

  • pageCount値は、最後の空でないページの数です。*

これは私がページネーションのために持っているものです...

//pagination 
const pageLimit = 10; 
app.get('/api/posts', function(req, res) { 
    res.json({ 
    "posts": posts.slice(-pageLimit).reverse(), 
    "page": 1, 
    "pageCount": Math.ceil(posts.length/10) 
    }); 
}); 

リターンあたり10柱として正しいですか ページ1からページ2(次のページ)に進む前に何も起こりません。

このページの先頭ですこのページの本文へYahoo!知恵袋私は私が推測している次のようなものを実装する必要がありますが、私はどのように行うには、それが

任意の助けをいただければ幸いです

...

答えて

0

2日間、私の頭を悩また後、私はme..Thankのために働く解決策を見つけ、あなたが指し示すnum8erは、私は正しい方向に...

app.get('/api/posts', (req, res) => { 
    const pageCount = Math.ceil(posts.length/10); 
    let page = parseInt(req.query.p); 
    if (!page) { page = 1;} 
    if (page > pageCount) { 
    page = pageCount 
    } 
    res.json({ 
    "page": page, 
    "pageCount": pageCount, 
    "posts": posts.slice(page * 10 - 10, page * 10) 
    }); 
}); 
1

チェックこれを任意のアイデアを持っていない:

app.get('/api/posts', (req, res) => { 
    const postCount = posts.length; 
    const perPage = 10; 
    const pageCount = Math.ceil(postCount/perPage); 

    let page = parseInt(req.query.p); 
    if(page < 1) page = 1; 
    if(page > pageCount) page = pageCount; 

    const from = postCount - ((page - 1) * perPage) - 1; // ex.: 44 - ((1 - 1) * 10) -1 = 43 (44 is count, 43 is index) 
    let to = postCount - (page * perPage); // ex.: 44 - (1 * 10) = 34 
    if(to < 0) to = 0; 

    res.json({ 
    posts: posts.slice(from, to).reverse(), 
    page, 
    pageCount 
    }); 
}); 

P.S. postsの配列をデータベースから取得した場合 - データベースのパワーを使用して必要なデータを取得することを強くお勧めします。それ以外の場合は、数千のページを取得して配列を10個にスライスすると、パフォーマンス上の問題が発生します。

+0

いいえは、メモリ内のテストファイルです。 No db related ....あなたのソリューションは私が必要としているものとほとんど同じです。 "ReferenceError:ページが定義されていません"というエラーが発生しているため、調整方法を理解してください。 – Gallex

+0

@Gallex fixed、私のせい – num8er

+0

@Gallexが正しいサイズの投稿に応じて固定されている – num8er

0

あなたはほぼそこにいます。あなたは一部が欠落している、ここでは実用的な例です:

let records = [ 
    1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 
]; 
let pageSize = 5; 

function paginate(page = 1) { 
    //when page is 1, we go from index 0 to index 4 
    //that's the first 5 records. 
    return records.slice(pageSize * (page - 1), pageSize * page); 
} 

console.log(paginate(1)); 
console.log(paginate(2)); 
console.log(paginate(3)); 

https://jsfiddle.net/fe4s2qxv/

0
export default (limit, offset, count) => { 
    const metaData = {}; 
    limit = limit > count ? count : limit; 
    offset = offset > count ? count : offset; 

    metaData.page = Math.floor(offset/limit) + 1; 
    metaData.pageCount = Math.ceil(count/limit); 
    metaData.pageSize = Number(limit); 
    metaData.totalCount = count; 

    return metaData; 
}; 
関連する問題