2016-09-18 3 views
0

익스프레스의 오브젝트를 모듈에서 어플리케이션으로 전달하는 데 어려움을 겪고 있습니다. 응용 프로그램은 간단합니다. 양식에서 입력을 가져 와서 문자열을 테스트 한 다음 null 또는 객체를 반환합니다. 그러나, 나는 다른 접근 방식을 시도하고 나의 객체는 여전히 정의되지 않은 상태로 되돌아 온다. 모듈에서 객체로 객체를 전달하는 가장 효율적인 방법을 찾고 있습니다. 여기 익스프레스 모듈 - 오브젝트를 메인 어플리케이션으로 내보내기

var app = express(); 
 
var path = require('path'); 
 
var router = express.Router(); 
 
var checkString = require('./checkString.js'); 
 

 
//Test Server Connection 
 
app.listen(3000, function() { 
 
    console.log('Example app listening on port 3000!'); 
 
}); 
 

 
//Set Use 
 
app.use(bodyParser.urlencoded({ 
 
    extended: false 
 
})); 
 
app.use(bodyParser.json()); 
 
app.use(router); 
 

 
//Set Routes 
 
app.set('view engine', 'ejs'); 
 
app.set('views', path.join(__dirname, './views/pages')); 
 

 

 
//GET Method 
 
router.get('/', function(req, res) { 
 

 
    //Renders EJS Template and variables 
 

 
    res.render('index'); 
 
}); 
 

 

 
//Receive User Input from Form 
 
//Post Request 
 
router.post('/', function(req, res) { 
 

 
    //Check Form Input Results 
 
    var formInput = req.body.inputText; 
 
    var ReqMethod = req.method; 
 
    console.log(`Method: ${ReqMethod}`); 
 
    console.log(`Body: ${formInput}`); 
 

 
    //Assign form data to a variable after calling a function 
 
    checkString.dateResponse(formInput); 
 

 

 
    //res.json(checkString.timeStamp); 
 
    res.end(); 
 
});
여기

내 모듈의 코드 ('checkString.js')

//var exports = module.exports {}; 
 

 
var moment = require('moment'); 
 

 
//Create TimeStamp Object to Export to Server.js 
 
exports.timeStamp = function(unix, natural) { 
 
    this.unix = unix; 
 
    this.natural = natural; 
 
} 
 

 
//Function Working in Chrome Console 
 

 
exports.dateResponse = function(data) { 
 

 

 
    //Check The Date 
 
    if (isNaN(data)) { 
 

 
    return null 
 

 
    } else { 
 

 
    return data; 
 

 
    } 
 

 

 
    //Update timeStamp object with time/date 
 

 
    if (data !== null) { 
 

 
    var unix = moment(x).unix(); 
 

 
    var natural = moment(x).format('MMM Do, YYYY'); 
 

 
    return timeStamp(unix, natural); 
 

 
    } else { 
 

 
    return null 
 
    } 
 

 
}

app.js 내에서 코드

답변

0

귀하의 코드에 대한 몇 가지 문제점을 보았습니다. 그러나 가장 중요한 것은 데이터를 반환하고 아무 것도하지 않는 것입니다. 따라서

console.log(checkString.dateResponse(formInput)); 

NaN이 아닌 경우 formInput을 반환해야합니다. 더 이상 아무것도, 그것은 더 이상 반환의 원인 갈 수 없어. 또한 "isNaN"은 숫자가 NaN인지 확인하는 가장 좋은 방법은 아닙니다 (많은 수의 경우 실패합니다). 난이인지를 확인하는 가장 좋은 방법은 비교하는 경우입니다.

a !== a 

은 NaN만이 동일하지 않기 때문에 발생합니다. 당신은 당신이 필요 intendation을 피할 상단

if(isNan(data) || data === null) { 
    return null 
} 

에 검사를 이동하는 경우

가 셋째 you'r 코드가 더 깔끔 할 수있다 (물론 나는 원인이 기능의 결과는 동일하지 될 수있는 프리미티브를 assumming 해요) . 논리 연산자를 변수로 옮기고 if 내부 변수 만 나타낼 수도 있습니다. (하지만 때로는 과용입니다)

const isNaN = data !== data; 
const isNull = data === null || data === undefined; 
const isNall = isNaN || isNull 
if (isNall) { 
    return null 
} 
+0

감사합니다. 나는 그 코드를 수정했다. console.log()를 사용하는 이유는 객체의 출력을 확인하기 위해서입니다. 그러나 아직 빈 개체가 나타납니다. 내 혼란은 timeStamp 객체를 전달하는 것과 관련이있다. 나는 돌아 오는 길에 빈 물건을 계속 얻는다. 문제점이 요청 메소드 또는 모듈에서 문자열을 점검하는지 확실하지 않습니다. – Vince

+0

내가 말했던 것 외에도 영원한 것으로 보인다. 어쩌면 그 formInput 값? 나는 그것의 약한 방법을 확인합니다 -하지만 귀하의 모듈을 함수 안에 넣고 결과가 있는지 확인합니다. 그러나 나는 모든 것이 좋다고 확신한다. 디버거를 사용할 수도 있습니다. (node.js 디버거 참조). 따라서 중단 점을 지정하고 코드가 통과하는지 여부와 그 상태를 확인할 수 있습니다. – Mort

+0

hmm .. 나는 여전히 함수에서 객체를 반환하는 데 어려움을 겪고 있습니다. 계속 검색해야합니다. 귀하의 통찰력에 감사드립니다. 그게 내 코드 정리에 도움이 됐어. – Vince

관련 문제