我是 Express 新手,所以我需要一些幫助。我需要創建一個路由器來從端點獲取一些值,如下所示(我無法修改端點,這是一項要求)
../house/1/us/ny&zipcode=12345
我試過
router.get("/:id/:country/:state")
我通過 req.params 獲得了 id、country 和 state 我得到了 id=1 country=us 并且對于 state 的價值,我得到了"ny&zipcode=12345"但我實際上想要同時得到
州=紐約郵政編碼=12345
我試過 req.query 但它不起作用或者我使用不正確有什么建議嗎?提前致謝
uj5u.com熱心網友回復:
網址編碼
我看到的代碼中的第一個問題(我猜?)是您使用&而不是?啟動查詢引數;我們&用來分隔鍵值對(如foo=bar&baz=hello)。所以,你可能想檢查一次。
如果將 更改&為 a ?,則可以使用 訪問它req.query.<objectName>。
其他解決方案
我也只是你的編輯,為了讓我們可以作業,/house/:id/:country/:stateAndZip我們需要做一些改變。
我可能會使用這種方法:
const { stateAndZip } = req.params;
const [ state, zipCode ] = stateAndZip.split( '&' );
// Here, state contains 'ny' and `zipCode` is of the work `zipcode=XXXXX`.
const [ , formattedZipCode ] = zipCode.split( '=' ); // Or use https://nodejs.org/api/querystring.html
// formattedZipCode is XXXXX.
此解決方案存在一些問題;第一個是假設zipcode是 之后的第一個引數&。如果您想要更通用的方法,請告訴我。
更好的解決方案
從上面獲取解決方案并假設我們有一個無序串列zipcode可以在任何地方,我們可以執行以下操作:
const qs = require( 'querystring' );
const { stateAndZip } = req.params;
const [ state, queryParams ] = stateAndZip.split( '&' );
const decodedQueryParams = qs.parse( queryParams );
// decodedQueryParams will be an object with the property `zipcode`.
這里的一個問題是,我們可能&在 URL 本身中有一個與號 ( ),您可以通過假設所有縮寫形式的州名稱只有 2 個字符并讀取到&,并決議出剩余的字串來進一步解決此問題使用querystring.
uj5u.com熱心網友回復:
端點應該是 /house/1/us/ny?zipcode=12345 然后 req.query.zipcode 將具有郵政編碼值。? 代替 &。
當使用 /house/1/us/ny&zipcode=12345 時,req.params 將 ny&zipcode=12345 視為關鍵狀態的值。? 結束端點并開始查詢引數。
uj5u.com熱心網友回復:
如前所述,您的要求有點奇怪。但是,expressjs路由器的路徑定義非常靈活(查找
完整示例
import * as express from 'express';
const express = require("express");
const app = express();
const houseRouter = express.Router();
houseRouter.get("/:id/:country/:state&zipcode=:zipcode", (req) => {
console.log(req.params);
});
app.use('/house', houseRouter);
app.listen(3000);
要測驗,請http://localhost:3000/house/1/us/ny&zipcode=12345從postman/browser呼叫。
控制臺會記錄:
{ id: '1', country: 'us', state: 'ny', zipcode: '12345' }
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/398914.html
標籤:javascript 节点.js 表达
