通过node.js中的导入json进行交互并表达,然后用jade

时间:2016-05-20 14:08:20

标签: javascript json node.js express pug

在StackExchange上查看相关问题中给出的示例和答案并尝试使用它们来解决我的问题后,我终于发布了我的问题。哎呀....

所以我的目标是最终通过api和REST访问一些复杂的json。我希望导入(目前通过require,但最终通过Oauth&#d; RESTful API)json,解析它以发现键/值对(包括嵌套键和值),然后至少创建一个对象,然后我可以显示并可访问所有元素。我希望这是有道理的。无论如何,要开始构建我认为我得到一些例子json并要求它。好吧,我最初尝试使用我将要使用的API中的一些json,但我担心它会导致问题(好吧,我对节点,快递和玉的经验不足是真的原因)所以我决定简化并抓住一些非常简单的json。 A colorsArray。所以..现在有些代码。这是控制台输出,包括我在尝试渲染网页后得到的错误后得到的错误。请忽略这些路径,因为我使用面向php的Eclipse IDE来运行nodeclipse(这很棒btw)

{ colorsArray: 
   [ { colorName: 'red', hexValue: '#f00' },
     { colorName: 'green', hexValue: '#0f0' },
     { colorName: 'blue', hexValue: '#00f' },
     { colorName: 'cyan', hexValue: '#0ff' },
     { colorName: 'magenta', hexValue: '#f0f' },
     { colorName: 'yellow', hexValue: '#ff0' },
     { colorName: 'black', hexValue: '#000' } ] }
Express server listening on port 3000

经过一些工作(通过以下评论和答案提供建议)我现在在浏览器中获得以下内容

**Express**

Welcome to Express

[object Object]

我已在以下部分更新代码以反映建议。

这是当前的 app.js

/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path');

//Load projects as JSON.
var ob = require('./simple.json');
console.log(ob);

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// set object for templates
app.locals('ob' , ob);

// development only
if ('development' === app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);
app.get('/users', user.list);


http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

当前 index.js

/*
 * GET home page.
 */


exports.index = function(req, res){
  res.render('index', { title: 'Express' , ob: req.body});
  };

index.jade

extends layout

block content
  h1= title
  p Welcome to #{title}
  p #{ob}



for(var prop in ob)
 p #{ob.colorName}: #{ob.hexValue}

最后是layout.jade

doctype html
html
  head
    title= title
    link(rel='stylesheet', href='/stylesheets/style.css')
  body
    block content

ADD - >最初忘记添加我试图导入的json文件

{
    "colorsArray":[{
            "colorName":"red",
            "hexValue":"#f00"
        },
        {
            "colorName":"green",
            "hexValue":"#0f0"
        },
        {
            "colorName":"blue",
            "hexValue":"#00f"
        },
        {
            "colorName":"cyan",
            "hexValue":"#0ff"
        },
        {
            "colorName":"magenta",
            "hexValue":"#f0f"
        },
        {
            "colorName":"yellow",
            "hexValue":"#ff0"
        },
        {
            "colorName":"black",
            "hexValue":"#000"
        }
    ]
}

所以你有它。同样,我喜欢能够获取json,解析它以识别元素(包括嵌套的子元素)并将其作为我可以访问逻辑和显示的对象。但是现在,我只是能够在玉器中显示它并通过循环访问对象的元素而感到头晕目眩。

感谢您抽出时间仔细阅读此内容,我知道其他示例已在此处回答,但我花了一周的时间尝试使用这些解决方案而没有运气

1 个答案:

答案 0 :(得分:0)

当node.js需要json文件时automatically parses it。 你试图在这里第二次解析它:

exports.index = function(req, res){
  var ob = JSON.parse(ob);
  res.render('index', { title: 'Express' , ob: ob});
};

尝试省略JSON.parse并将对象直接传递给渲染方法。