Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么赢了';我的查询工作不需要等待吗?如何修复';query.orderBy';这不是一个函数吗?_Javascript_Mysql_Node.js_Express_Knex.js - Fatal编程技术网

Javascript 为什么赢了';我的查询工作不需要等待吗?如何修复';query.orderBy';这不是一个函数吗?

Javascript 为什么赢了';我的查询工作不需要等待吗?如何修复';query.orderBy';这不是一个函数吗?,javascript,mysql,node.js,express,knex.js,Javascript,Mysql,Node.js,Express,Knex.js,我正在使用node.js、MySQL、knex和express 我正在对数据库db.findAllEmoji()进行一个简单的查询 我是从以前的代码工作,我建模后,但仍然卡住。下面有两个大代码块,第一个来自我的路由,我在routes\dashboard.js中呈现页面。第二个是我所追求的 下面第一个大代码块中的内容返回未定义,除非我使用let query=await db.findAllEmoji(),然后才返回查询结果。那很好,但是…如果我使用wait,那么.whereRaw和.orderBy

我正在使用node.js、MySQL、knex和express

我正在对数据库db.findAllEmoji()进行一个简单的查询

我是从以前的代码工作,我建模后,但仍然卡住。下面有两个大代码块,第一个来自我的路由,我在
routes\dashboard.js
中呈现页面。第二个是我所追求的

下面第一个大代码块中的内容返回未定义,除非我使用
let query=await db.findAllEmoji(),然后才返回查询结果。那很好,但是…如果我使用wait,那么.whereRaw和.orderBy会抛出这些错误,而我无法通过这些错误。这里有一个

TypeError:query.orderBy不是C:\Users\pauli\repos\all coursework节点paulwinka\tests\02上的函数。MySQL数据库模式emoji\routes\dashboard.js:21:21在ProcessTicks和Rejections(internal/process/task_queues.js:97:5)

我的示例代码不需要等待就可以工作,所以我更喜欢一个解决方案,它可以找出为什么没有等待我的查询就不能工作……或者可能

所以我的问题是,为什么原始查询在没有等待的情况下不能工作…我如何才能让它在没有等待的情况下工作,就像我的模型代码中一样? 如果在这种情况下我必须使用wait,我如何通过orderBy不工作来修复错误

我只使用了几个星期,现在仍在学习诀窍。谢谢。:)

这就是我正在建模的代码…也许我错过了一些明显的东西

  try {
    const industry = req.query.industry;
    const search = req.query.search;
    const pageSize = parseInt(req.query.pageSize) || 10;
    const pageNumber = parseInt(req.query.page) || 1;

    const industryOptionList = {
      selected: industry || '',
      options: [
        { value: '', text: 'All Categories' },
        { value: 'hospitality', text: 'Hospitality' },
        { value: 'foodservice', text: 'Foodservice' },
        { value: 'IT', text: 'IT' },
        { value: 'defense', text: 'Defense' },
        { value: 'finance', text: 'Finance' },
        { value: 'construction', text: 'Construction' },
      ],
    };

    let query = db.getAllListings();
    if (industry) {
      query = query.where('company.industry', industry);
    }
    if (search) {
      // query = query.whereRaw('MATCH (review.title, review.review_text) AGAINST (? IN NATURAL LANGUAGE MODE)', [search]);
      query = query.whereRaw(
        'listing_title LIKE ? OR company.industry LIKE ? OR company_name LIKE ? OR company_description LIKE ?',
        ['%' + search + '%', '%' + search + '%', '%' + search + '%', '%' + search + '%']
        );
      } else {
        query = query.orderBy('posted_date');
      }
      const pager = await pagerUtils.getPager(query, pageSize, pageNumber, req.originalUrl);
      const listings = await query.limit(pageSize).offset(pageSize * (pageNumber - 1));
      debug(`listings length is ${listings.length}`);

    if (!req.xhr) {
      res.render('listing/listing-list', {
        title: 'Jobify: Listings',
        listings,
        industry,
        industryOptionList,
        search,
        pager,
      });
    } else {
      res.render('listing/search-results', { listings, pager: pager, layout: null });
    }
  } catch (err) {
    next(err);
  }
});
这是我的..db代码,以防有帮助

// get connection config
const config = require('config');
const { sum } = require('lodash');
const databaseConfig = config.get('db');
const debug = require('debug')('app:server');

//connect to the database
const knex = require('knex')({
  client: 'mysql',
  connection: databaseConfig,
});
const findAllEmoji = () => {
  return knex('emoji')
  .select('*');
};
module.exports = {
  knex,
  findAllEmoji,
};


如果您没有等待或调用查询生成器的
.then()
,则只生成查询,但永远不会执行查询


查询生成器的工作方式是,您可以在不同的代码行中将更多的
、where
、join
等部分添加到查询中(就像您在
router.get('/',async(req,res,next)=>{
)当查询准备好后,需要执行它,这样它才会发送到DB服务器以获得响应。

导入的
。/DB
代码中没有包含这些代码。所以在这个和MySQL驱动程序之间有一些代码。文件中有什么?好的,谢谢……我刚刚添加了它。我希望这是您需要看到的。代码是什么意思介于两者之间。类似于ajax的东西?谢谢。我只是没有理解这样一个概念,即在稍后使用我的其他代码所做的“等待”向查询中添加内容之前,查询不会保存任何值。
  try {
    const industry = req.query.industry;
    const search = req.query.search;
    const pageSize = parseInt(req.query.pageSize) || 10;
    const pageNumber = parseInt(req.query.page) || 1;

    const industryOptionList = {
      selected: industry || '',
      options: [
        { value: '', text: 'All Categories' },
        { value: 'hospitality', text: 'Hospitality' },
        { value: 'foodservice', text: 'Foodservice' },
        { value: 'IT', text: 'IT' },
        { value: 'defense', text: 'Defense' },
        { value: 'finance', text: 'Finance' },
        { value: 'construction', text: 'Construction' },
      ],
    };

    let query = db.getAllListings();
    if (industry) {
      query = query.where('company.industry', industry);
    }
    if (search) {
      // query = query.whereRaw('MATCH (review.title, review.review_text) AGAINST (? IN NATURAL LANGUAGE MODE)', [search]);
      query = query.whereRaw(
        'listing_title LIKE ? OR company.industry LIKE ? OR company_name LIKE ? OR company_description LIKE ?',
        ['%' + search + '%', '%' + search + '%', '%' + search + '%', '%' + search + '%']
        );
      } else {
        query = query.orderBy('posted_date');
      }
      const pager = await pagerUtils.getPager(query, pageSize, pageNumber, req.originalUrl);
      const listings = await query.limit(pageSize).offset(pageSize * (pageNumber - 1));
      debug(`listings length is ${listings.length}`);

    if (!req.xhr) {
      res.render('listing/listing-list', {
        title: 'Jobify: Listings',
        listings,
        industry,
        industryOptionList,
        search,
        pager,
      });
    } else {
      res.render('listing/search-results', { listings, pager: pager, layout: null });
    }
  } catch (err) {
    next(err);
  }
});
// get connection config
const config = require('config');
const { sum } = require('lodash');
const databaseConfig = config.get('db');
const debug = require('debug')('app:server');

//connect to the database
const knex = require('knex')({
  client: 'mysql',
  connection: databaseConfig,
});
const findAllEmoji = () => {
  return knex('emoji')
  .select('*');
};
module.exports = {
  knex,
  findAllEmoji,
};