간단한 URL 단축 앱을 개발 중이며 다음과 같은 급행 경로가 있습니다.
app.get('/', function(req, res){
res.render('index', {
link: null
});
});
app.post('/', function(req, res){
function makeRandom(){
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for( var i=0; i < 3 /*y u looking at me <33??*/; i++ )
text += possible.charAt(Math.floor(Math.random() * possible.length));
return text;
}
var url = req.body.user.url;
var key = makeRandom();
client.set(key, url);
var link = 'http://50.22.248.74/l/' + key;
res.render('index', {
link: link
});
console.log(url);
console.log(key);
});
app.get('/l/:key', function(req, res){
client.get(req.params.key, function(err, reply){
if(client.get(reply)){
res.redirect(reply);
}
else{
res.render('index', {
link: null
});
}
});
});
/l/
내 경로 에서을 제거하고 (내 URL을 더 짧게 만들기 위해) : key 매개 변수를 선택적으로 만들고 싶습니다. 이것이 올바른 방법입니까?
app.get('/:key?', function(req, res, next){
client.get(req.params.key, function(err, reply){
if(client.get(reply)){
res.redirect(reply);
}
else{
next();
}
});
});
app.get('/', function(req, res){
res.render('index, {
link: null
});
});
내 /
경로가 “연결”될 경로 임을 지정 해야하는지 확실하지 않습니다 . 그러나 나의 유일한 다른 경로는 업데이트 된 포스트 /
경로이기 때문에 잘 작동 할 것이라고 생각합니다.
답변
이는 client.get이 첫 번째 매개 변수로 undefined를 전달할 때 수행하는 작업에 따라 작동합니다.
이와 같은 것이 더 안전합니다.
app.get('/:key?', function(req, res, next) {
var key = req.params.key;
if (!key) {
next();
return;
}
client.get(key, function(err, reply) {
if(client.get(reply)) {
res.redirect(reply);
}
else {
res.render('index', {
link: null
});
}
});
});
콜백 내에서 next ()를 호출하는 데 문제가 없습니다.
this 에 따르면 핸들러는 추가 된 순서대로 호출되므로 다음 경로가 app.get ( ‘/’, …)이면 키가 없으면 호출됩니다.
답변
Express 버전 :
"dependencies": {
"body-parser": "^1.19.0",
"express": "^4.17.1"
}
선택적 매개 변수는 매우 편리하며 express를 사용하여 쉽게 선언하고 사용할 수 있습니다.
app.get('/api/v1/tours/:cId/:pId/:batchNo?', (req, res)=>{
console.log("category Id: "+req.params.cId);
console.log("product ID: "+req.params.pId);
if (req.params.batchNo){
console.log("Batch No: "+req.params.batchNo);
}
});
위의 코드에서 batchNo 는 선택 사항입니다. Express는 URL 생성 후 ‘?’를 주었으므로 선택 사항으로 간주합니다. batchNo ‘/ : batchNo?’뒤에 기호
이제 categoryId 및 productId 만 사용하거나 세 매개 변수를 모두 사용하여 호출 할 수 있습니다.
http://127.0.0.1:3000/api/v1/tours/5/10
//or
http://127.0.0.1:3000/api/v1/tours/5/10/8987