Javascript 简单if语句在NodeJS中不起作用
我编写了一个NodeJS应用程序,它使用eBay API从eBay获取物品。我遇到了一个问题,某些项目正在通过,即使它们应该用一个简单的if语句过滤掉 该应用程序从前端接收作为JSON的post数据,执行每个搜索,然后根据某些参数过滤项目。以下是违规代码:Javascript 简单if语句在NodeJS中不起作用,javascript,node.js,Javascript,Node.js,我编写了一个NodeJS应用程序,它使用eBay API从eBay获取物品。我遇到了一个问题,某些项目正在通过,即使它们应该用一个简单的if语句过滤掉 该应用程序从前端接收作为JSON的post数据,执行每个搜索,然后根据某些参数过滤项目。以下是违规代码: if ( items[i].listingInfo.listingType != 'Auction' ) { //console.log( items[i].listingInfo.listingType ); if ( i
if ( items[i].listingInfo.listingType != 'Auction' ) {
//console.log( items[i].listingInfo.listingType );
if ( items[i].primaryCategory.categoryId == '9355' ) {
//console.log( items[i].primaryCategory.categoryId );
if ( price < maxPrice && price > 40 ) {
//console.log( price, maxPrice );
file = path +
items[i].itemId + '-' +
price + '-' + maxPrice + '-' +
items[i].primaryCategory.categoryId + '-' +
items[i].listingInfo.listingType;
if ( !fs.existsSync( file ) ) {
console.log(
'File ' + file + ' does not exist.',
!fs.existsSync( file ),
items[i].listingInfo.listingType,
price < maxPrice,
items[i].itemId
);
fs.writeFile( file, ' ', function(err) {
if (err) {
if (debug)
console.log('Writing ' + file + ' failed.');
}
else {
if (debug)
console.log('Writing ' + file + ' worked.');
returnData.success = true;
returnData.results[ result.itemId ] = result;
console.log( price, maxPrice, !fs.existsSync( file ) );
console.log('success');
}
})
}
else {
returnData.discard.file[ result.itemId ] = result;
delete returnData.results[ result.itemId ];
}
}
else {
returnData.discard.price[ result.itemId ] = result;
if (debug)
console.log('FAILED (price): ' + items[i].itemId + ' is ' + ( price - maxPrice ) + ' greater than maxPrice.');
}
}
else {
returnData.discard.cat[ result.itemId ] = result;
if (debug)
console.log('FAILED (categoryId): ' + items[i].itemId + ' is ' + items[i].primaryCategory.categoryId);
}
}
else {
returnData.discard.type[ result.itemId ] = result;
if (debug)
console.log('FAILED (listingType): ' + items[i].itemId + ' is a ' + items[i].listingInfo.listingType);
}
我还使用节点集群,因此我的server.js文件有以下内容:
function start(route, handle) {
if ( cluster.isMaster ) {
for ( var i = 0; i < numCPUs; i++ ) {
cluster.fork();
}
cluster.on('exit', function( worker, code, signal) {
console.log( 'worker ' + worker.process.pid + ' died' );
})
}
else {
function onRequest(request, response) {
var postData = "";
var pathname = url.parse(request.url).pathname;
request.setEncoding("utf8");
request.addListener("data", function(postDataChunk) {
postData += postDataChunk;
});
request.addListener("end", function() {
//console.log('Request ended.');
if ( postData != '' ) {
postData = JSON.parse(postData);
}
//console.log(postData.search.searches[0]);
route(handle, pathname, response, postData);
});
}
http.createServer(onRequest).listen(8888);
console.log("Server has started.");
}
}
编辑2:price
设置在此代码段之前。它是在易趣的响应中返回的,它的位置取决于物品[i].listingInfo.listingType,因此有一个简单的if/else来设置它
if ( items[i].listingInfo.listingType == 'AuctionWithBIN' ) {
price = parseInt( items[i].listingInfo.buyItNowPrice.USD );
}
else {
price = parseInt( items[i].sellingStatus.currentPrice.USD );
}
JSON返回listingType、maxPrice和price
请尝试
if(items[i].price40)
作者几乎肯定无法对这个问题做出任何贡献,以澄清我的陈述是否属实,就像六年前被问到的那样
但是,可以相当肯定的是,问题与代码的以下部分有关:
fs.writeFile( file, ' ', function(err) {
if (err) {
if (debug)
console.log('Writing ' + file + ' failed.');
}
else {
if (debug)
console.log('Writing ' + file + ' worked.');
returnData.success = true;
returnData.results[ result.itemId ] = result;
console.log( price, maxPrice, !fs.existsSync( file ) );
console.log('success');
}
})
fs.writeFile
是异步的,如果OP在结果列表上循环,那么returnData.results[result.itemId]=result
中的result
将始终引用循环的最后一个元素,无论该元素是否与条件if(price40)匹配{
与否。编辑解释一下。你在哪里设置变量价格
?@robertc我对Alex Smith的答案发表了评论。好吧,让我换一种方式说:请显示你用来设置变量价格的代码。因为涉及这个变量的比较似乎是整个问题的关键由于您发布了大量其他似乎不相关的代码,我感到惊讶的是,您忽略了这一关键部分,似乎并不认为这很重要。哈哈,好吧。很抱歉误解。我在半睡半醒的时候进行了编辑和评论。价格是以前设定的。它在eB的回复中返回根据listingType的不同,ay和位于不同的位置。
if ( items[i].listingInfo.listingType == 'AuctionWithBIN' ) {
price = parseInt( items[i].listingInfo.buyItNowPrice.USD );
}
else {
price = parseInt( items[i].sellingStatus.currentPrice.USD );
}
fs.writeFile( file, ' ', function(err) {
if (err) {
if (debug)
console.log('Writing ' + file + ' failed.');
}
else {
if (debug)
console.log('Writing ' + file + ' worked.');
returnData.success = true;
returnData.results[ result.itemId ] = result;
console.log( price, maxPrice, !fs.existsSync( file ) );
console.log('success');
}
})