在app.js和html之间共享数据

时间:2016-10-22 05:17:20

标签: javascript angularjs node.js express

使用Node.js和Express,我的第一条路线决定了客户的语言:

var express = require('express'),
    app = module.exports = express(),
    server = require('http').createServer(app),
    io = require('socket.io').listen(server),
    ent = require('ent'),
    fs = require('fs'),
    path = require('path'),
    request = require('request');

app.set('view engine', 'ejs');
app.use(express.static(__dirname + '/public'));

app.get('/', function (req, res) {
  var ip = req.ip;
  request('http://freegeoip.net/json/' + ip, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        var data = JSON.parse(body);
        var code = data.country_code.toLowerCase();
    }
  });
  res.render('index.ejs');
});

然后我需要将code传递给index.ejs以显示相应的语言。

有些人建议使用Angular来共享范围,但Angular并未在我的应用中定义,只能在index.ejs中定义。我不确定是否应该将其添加到app.js。

其他人建议在应用上使用module.exports,但require也不会在前端工作。

这样做的好方法是什么?

1 个答案:

答案 0 :(得分:0)

在调用res.render后调用回调内的http://freegeoip.net,并将视图呈现为对象参数所需的任何数据传递给res.render,即

app.get('/', function (req, res) {
    var ip = req.ip;
    request('http://freegeoip.net/json/' + ip, function (error, response, body) {
        if (!error && response.statusCode == 200) {
            var data = JSON.parse(body);
            var code = data.country_code.toLowerCase();
            res.render('index.ejs', {
                code: code
            });
        }
    });
});