Возможно, мне не хватает чего-то основного, как это происходит.Javascript: Почему объект не получает инициализацию при новом вызове api, однако строковая переменная есть?
GET: example.com/users
// предоставляет все данные
GET: example.com/users?status=1
// дает данные со статусом = 1
GET: example.com/users
// это не работает дает те же данные, что и проницаемым условия API со статусом = 1
С третьим ударом self.whereObj
не инициализирует пустой объект по умолчанию, вместо этого он принимает предыдущее значение {'status' = '1'}
, однако self.page
и self.limit
принимает значение по умолчанию, если в строке запроса не указан параметр запроса.
example.com/users?limit=3
// принимает значение переопределения для 3
формы по умолчанию 5
example.com/users
// self.limit
принимает по умолчанию 5
и это работает отлично
Так что мой вопрос, почему self.limit
(простая переменная строка) является инициализация однако self.whereObj
нет?
var Bookshelf = require('../../dbconfig').bookshelf;
Bookshelf.Collection = Bookshelf.Collection.extend({
limit: 5,
page: 1,
whereObj: {}
myFetch: function (query_params,expectedWhereFields) {
var self = this;
var whereObj = self.whereObj ; // this is not initializing
// var whereObj = {}; this is initialising
var page = self.page;
var limit = self.limit; //this is not showing nay initialisation error
for (var x in query_params) {
if (expectedWhereFields.includes(x)) {
whereObj[x] = query_params[x];
}
if (x === 'page') {
page = query_params[x];
}
if (x === 'limit') {
limit = query_params[x];
}
}
var offset = (page - 1) * limit;
function fetch() {
return self.constructor.forge()
.query({where: whereObj})
.query(function (qb) {
qb.offset(offset).limit(limit);
})
.then(function (collection) {
return collection;
})
.catch(function (err) {
return err
});
}
return new fetch();
}
});
module.exports = Bookshelf;
ОБНОВЛЕННЫЕ
service.js
var Model = require('./../models/Users');
var express = require('express');
var listUsers = function (query_params, callback) {
var expectedWhereFields = ["type", "status", "name"];
Model.Users
.forge()
.myFetch(query_params, expectedWhereFields)
.then(function (collection) {
return callback(null, collection);
})
.catch(function (err) {
return callback(err, null);
});
};
module.exports = {
listUsers: listUsers
};
модели/Users.js
var Bookshelf = require('../../dbconfig').bookshelf;
var Base = require('./base');
// Users model
var User = Bookshelf.Model.extend({
tableName: 'user_table'
});
var Users = Bookshelf.Collection.extend({
model: User
});
module.exports = {
User: User,
Users: Users
};
Является ли эта магистраль? –
No Nodejs (экспресс). – atjoshi
даже 'self.limit' не инициализируется, вы просто вызываете метод' myFetch', который не инициализирует свойства объекта. просто делайте это с помощью 'var whereObj = {};' –