使用NodeJS Request后如何在功能完成后将信息传递给视图?

时间:2016-06-25 18:22:24

标签: json node.js asynchronous

我正在编写代码来获取一些JSON数据并将其传递给具有给定数据的新视图。 该视图称为/ newbook2,我想通过API调用的JSON文件将书名,作者姓名等信息传递给视图。

var s_book_name;
var s_author_name;
var s_isbn13_id;
var s_publisher_name;
var s_category_id;
var error="";

router.post('/searchbook', function(req, res){

    var isbn=req.body.isbn;
    var url="http://isbndb.com/api/v2/json/63JEP95R/book/"+isbn;
    request({
    url: url,
    json: true
    }, function (error, response, body) {
          if (!error && response.statusCode === 200) {
                if(body.data[0].title!=null)
                  s_book_name=body.data[0].title;
                if(body.data[0].author_data[0]!=null)
                  s_author_name=body.data[0].author_data[0].name;
                if(body.data[0].isbn13!=null)
                  s_isbn13_id=body.data[0].isbn13;
                if(body.data[0].publisher_name!=null)
                  s_publisher_name=body.data[0].publisher_name;
                if(body.data[0].subject_ids[0]!=null)
                  s_category_id=body.data[0].subject_ids[0];
              }
          else error="Book not found. Please enter the information manually."
    });
    res.redirect('/newbook2');

    });

但是,我的视图中尚未加载信息。这似乎是异步调用的常见问题。但是,我是nodejs的新手,并希望得到有关如何修复它的任何帮助。

router.get('/newbook2', function(req, res){
    res.render('newbook2', {title: 'Add New Book',s_book: s_book_name, s_author: s_author_name, s_isbn13: s_isbn13_id ,s_publisher: s_publisher_name , s_category: s_category_id});
    });

1 个答案:

答案 0 :(得分:0)

你需要使用promises。以下是一些示例代码供您参考POST电话。

router.post('/newBook', function(req, res, next) {
    console.log('Please add your here to get the data from server');
    Obj.then(function() {
        res.send('You got the success response from the server');
    });
});

res.send('Your Book has been successfully added.');只有在您从服务器获得成功响应后才会执行。 请详细了解承诺的概念。