我有一个像这样声明的JS数组:
var phones = [
{name: "Redmi Note 5" , manufacturer: "Redmi" , price: 9999},
...
];
我使用以下代码收听此服务器:
app.listen(9999, function (err) {
if (err) {
throw err
}
console.log('Server started on port 9999');
})
这是我正在使用的功能:
app.get('/get-items' , function(req , res) {
var resu = phones;
var man = (req.query['manufacturer'] === '');
var mod = (req.query['name'] === '');
console.log(man);
console.log(mod);
if (man)
sortman(req , resu);
if (mod)
sortmod(req , resu);
var jsonResult = JSON.stringify(resu);
res.set('Content-Type', 'application/json');
res.send(jsonResult);
})
如果我提供类似http://localhost:9999/get-items?manufacturer=Samsung
的网址,我会将日志都视为错误,即使我没有提供任何参数,这两个日志仍会显示为错误。
我想知道我确实应该使用req.query['name']
还是应该使用别的东西?
编辑:我使用require()
声明了所需的依赖项答案 0 :(得分:1)
那是因为:
req.query['manufacturer'] is equal to 'Samsung' and
req.query['name'] is equal to undefined.
undefined and '' (empty string) are two different things in javascript. And they are not equal.
如果要检查所有这些,请使用lodash
中的isEmpty()var _ = require('lodash')
app.get('/get-items' , function(req , res) {
var resu = phones;
if (_.isEmpty(req.query['manufacturer']))
sortman(req , resu);
if (_.isEmpty(req.query['name']))
sortmod(req , resu);
var jsonResult = JSON.stringify(resu);
res.set('Content-Type', 'application/json');
res.send(jsonResult);
})
isEmpty(val)将返回true,如果val是以下任何一个: [空对象,空字符串,空数组,空,未定义]
答案 1 :(得分:1)
您可能希望将制造商和名称分配给变量mod
和man
。
app.get('/get-items' , function(req , res) {
var resu = phones;
var man = !!req.query['manufacturer'];
var mod = !!req.query['name'];
console.log(man);
console.log(mod);
if (man)
sortman(req , resu);
if (mod)
sortmod(req , resu);
var jsonResult = JSON.stringify(resu);
res.set('Content-Type', 'application/json');
res.send(jsonResult);
})
然后当您使用?manufacturer=Samsung
进行通话时,您将在日志Samsung
中调用排序函数。
编辑:您可以将任何内容强制转换为布尔值,双重感叹号!!req.query['manufacturer']
将始终返回true / false,具体取决于您是否已提供它。
您可以在此处详细了解运营商:What is the !! (not not) operator in JavaScript?
答案 2 :(得分:1)
试试这个,如果您将任何值传递给制造商或名称。它会检查一个空字符串并且未定义。
app.get('/get-items', function (req, res) {
var resu = phones;
if (req.query.manufacturer) // ?manufacturer=Samsung
sortman(req, resu);
if (req.query.name) // ?name=xyz
sortmod(req, resu);
var jsonResult = JSON.stringify(resu);
res.set('Content-Type', 'application/json');
res.send(jsonResult);
})