2014-01-18 2 views
1

당신이 저를 도울 수 있다면 정말 좋을 것입니다! 나는 node.js와 heroku를 사용하여 앱을 공개하지 않으며 web.js 파일을 변경하여 새로운 게시물을 추가합니다. 이것은 더 일찍 좋았지 만, 더 많은 페이지로, 그것은 손에서 벗어나기 시작했습니다. 이걸 자동화 할 수 있을지 궁금한가요? 예,이 내 web.js 파일이 지금과 같은 모습입니다 :heroku에서 node.js가있는 페이지를 자동으로 추가 하시겠습니까?

var express = require('express'); 
var fs = require('fs'); 
var htmlfile = "index.html"; 
var app = express(express.logger()); 

//day 7 and so on.. till day 15. 

var day6 = "./100/day6/day6.html"; 
app.get('/day6', function(request, response) { 
var html = fs.readFileSync(day6).toString(); 
response.send(html); 
}); 

var day5 = "./100/day5/day5.html"; 
app.get('/day5', function(request, response) { 
var html = fs.readFileSync(day5).toString(); 
response.send(html); 
}); 

var day4 = "./100/day4/day4.html"; 
app.get('/day4', function(request, response) { 
var html = fs.readFileSync(day4).toString(); 
response.send(html); 
}); 

var day3 = "./100/day3/day3.html"; 
app.get('/day3', function(request, response) { 
var html = fs.readFileSync(day3).toString(); 
response.send(html); 
}); 

var day2 = "./100/day2/day2.html"; 
app.get('/day2', function(request, response) { 
var html = fs.readFileSync(day2).toString(); 
response.send(html); 
}); 

var challengehtmlfile = "100.html"; 
app.get('/100-day-challenge', function(request, response) { 
var html = fs.readFileSync(challengehtmlfile).toString(); 
response.send(html); 
}); 

var bloghtmlfile = "blog.html"; 
app.get('/blog', function(request, response) { 
var html = fs.readFileSync(bloghtmlfile).toString(); 
response.send(html); 
}); 


app.get('/', function(request, response) { 
var html = fs.readFileSync(htmlfile).toString(); 
response.send(html); 
}); 

var port = process.env.PORT || 8080; 
app.listen(port, function() { 
    console.log("Listening on " + port); 
}); 
+0

변수로 파일 이름이있는 행을 삽입하는 BASH 스크립트를 작성할 수 있습니다. 새 페이지를 작성할 때마다 자동으로 행을 삽입하는 스크립트를 호출 할 수 있습니다. – lovetostrike

+0

URL과 id를 사용하여 일부 데이터베이스와 쿼리를 사용하는 이유는 무엇입니까? 아니? – Leg0

+0

나는 이것에 아주 멍청하다. 어떻게 구체적으로 할 수 있을까? – Kostar

답변

1

페이지를 더 추가하려는 경우 페이지 당 하나의 경로를 추가하는 것은 좋지 않습니다. 더 나은 방법은 라우팅에서 패턴 일치를 사용하는 것입니다. 예 :

app.get('/day/:num', function(request, response) { 
var day = "./100/day" + request.params.num + "/day" + request.params.num + ".html"; 
var html = fs.readFileSync(day).toString(); 
response.send(html); 
}); 

이제이 경로는 일 수와 일치합니다. 변경해야 할 것은 URL뿐입니다. '/ day3'대신 '/ day/3'에 액세스해야합니다. /day/:num에서 :num은 URL의 변수 이름입니다. request.params.num을 통해 해당 변수에 액세스합니다. 그런 다음 그 정보로 파일 이름을 만듭니다. 이 스크립트가 정리되기를 바랍니다. :) 자세한 내용은 express api (http://expressjs.com/api.html#req.params)를 확인하십시오.

1

복사이 코드는 "insert.sh"로 저장합니다.

#!/bin/bash 
count=$1 
day=day$1 

sed -i "/express(express.logger());/avar ${day} = \"./100/${day}/${day}.html\";\napp.get('/${day}', function(request, response) {\nvar html = fs.readFileSync(${day}).toString();\nresponse.send(html);\n});\n" $2 

이 스크립트는 # 일과 파일 이름의 두 매개 변수를 사용합니다. 예 :

bash insert.sh 3 yournode.js 

이 명령은 node3에 필요한 코드를 node.js 파일에 삽입합니다. 그 줄을 express.logger() 줄 뒤에 추가한다고 가정했습니다. 다른 줄 뒤에 코드를 넣으려면 스크립트의 express(express.logger());을 원하는 것으로 바꾸기 만하면됩니다. 저에게 알려주세요.

관련 문제