Javascript nodeJS中的导出

Javascript nodeJS中的导出,javascript,mysql,node.js,express,Javascript,Mysql,Node.js,Express,好的,我有路线: var express = require('express'); var router = express.Router(); var articles = require('../model/articles.js'); router.get('/all', function(req, res, next) { res.json(articles.getAll()); console.log( "From route: " + articles.getAll())

好的,我有路线:

var express = require('express');
var router = express.Router();
var articles = require('../model/articles.js');

router.get('/all', function(req, res, next) {
  res.json(articles.getAll());
  console.log( "From route: " + articles.getAll());
});
module.exports = router;
我有一个模型:

var mysql = require("mysql");
var con = mysql.createConnection({
    host: "localhost",
    user: "rest_news",
    password: "rest_news",
    database: "rest_news"
});
exports.getAll = function () {
    con.query('SELECT * FROM articles', function(err, rows){
        if(err) {
            return err;
        } else {
            console.log("From model:  " + rows);
            return rows;
        }
    });
};
我需要从mysql获取所有文章,我使用该模型文章,方法getAll()。我在控制台中看到:

From route: undefined
GET /article/all 200 22.802 ms - -
From model:  [object Object],[object Object]
From model:  [object Object],[object Object]

getAll()第二次工作,为什么?

使用回调函数:

var mysql = require("mysql");
var con = mysql.createConnection({
    host: "localhost",
    user: "rest_news",
    password: "rest_news",
    database: "rest_news"
});
exports.getAll = function (callbackFunction) {
    con.query('SELECT * FROM articles', callbackFunction);
};

现在,在您的路线中,请执行以下操作:

var express = require('express');
var router = express.Router();
var articles = require('../model/articles.js');

router.get('/all', function(req, res, next) {
  articles.getAll(function(err, articles){
    if (err) {
        res.status(500).send({message: 'Ups something bad happened!'});
    }else{
        res.json(articles);
    }
  })
});
module.exports = router;
说明:节点使用回调通知主循环发生了什么。在代码中,当您说:

  res.json(articles.getAll());

实际上,您正在发回未定义的内容,这就是查询函数中存在文章的原因,因为这部分代码是在获取文章之后执行的,并且
res.json(articles.getAll())
在您输入模型函数并将查询发送到sql db之后立即执行。

使用回调函数:

var mysql = require("mysql");
var con = mysql.createConnection({
    host: "localhost",
    user: "rest_news",
    password: "rest_news",
    database: "rest_news"
});
exports.getAll = function (callbackFunction) {
    con.query('SELECT * FROM articles', callbackFunction);
};

现在,在您的路线中,请执行以下操作:

var express = require('express');
var router = express.Router();
var articles = require('../model/articles.js');

router.get('/all', function(req, res, next) {
  articles.getAll(function(err, articles){
    if (err) {
        res.status(500).send({message: 'Ups something bad happened!'});
    }else{
        res.json(articles);
    }
  })
});
module.exports = router;
说明:节点使用回调通知主循环发生了什么。在代码中,当您说:

  res.json(articles.getAll());

实际上,您返回的是未定义的,这就是查询函数中存在文章的原因,因为这部分代码是在获取文章和
res.json(articles.getAll())之后执行的
在您进入模型函数并将查询发送到sql db后立即执行。

不起作用,因为您将异步代码视为同步代码。getAll函数不返回任何内容。不起作用,因为您将异步代码视为同步代码。getAll函数不返回任何内容。是的,这很有效,很抱歉重复。请给出导出示例。getAll for mongodb??是否使用mongoose或mongodb驱动程序?是的,这很有效,很抱歉重复。请给出导出示例。getAll for mongodb??是否使用mongoose或mongodb驱动程序?