2016-02-19 24 views
1

好吧,我有路線:出口中的NodeJS

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()在第二次工作,爲什麼?

+2

無法正常工作,因爲您正在處理異步代碼,如同步代碼。 getAll函數不返回任何東西。 – migg

回答

0

使用一個回調函數:

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()); 

你實際上是在發回不確定的,這就是爲什麼文章exsistt查詢功能裏面,因爲那部分代碼執行完畢物品被取出並res.json(articles.getAll())執行你進入之後模型函數並將查詢發送到SQL數據庫。

+0

是的,那份工作,對不起,重複。 – steelRat

+0

你可以舉個例子,用於MongoDB的exports.getall? – Vishal

+0

你使用貓鼬或mongodb驅動程序? –