节点JS:500服务器错误

时间:2015-10-20 10:49:00

标签: node.js

我是这个节点js的新手。所以,请耐心等待。

我在dotNetFin.js中有一个json字符串数组。我不确定为什么会出现错误(当我切换到About页面时),并且在命令提示符窗口中,它显示“未定义不是函数”

此外,如果我在app.js中包含json数组,一切正常。

这是我的代码:

app.js

var express = require('express');

var app = express();
app.set('port', process.env.PORT || 3000);

app.get('/', function (req, res) {
    res.render('home');
});

var teamData = require('./dotnetFin.js');
app.get('/about', function (req, res) {
    res.render('about', { dotnet: teamData.getTeamData() });
});
//custom 404 page
app.use(function (req, res) {
    res.type('text/plain');
    res.status(404);
    res.send('404 Not Found');
});

app.use(function (err, req, res, next) {
    console.log(err.stack);
    res.type('text/plain');
    res.status(500);
    res.send('500 Server Error');
});

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

var handleBars = require('express3-handlebars').create({ defaultLayout: 'main' });
app.engine('handlebars', handleBars.engine);
app.set('view engine', 'handlebars');

dotnetFin.js

var dotnetTeam = ["V",  
                        "M", 
                        "A",  
                        "H", 
                        "A", 
                        "G", 
                        "K"];

var getTeamData = function () {
    return dotnetTeam;
};

main.handlebars

<!doctype html>
<html>
  <head>
    <h2>Fin</h2>
  </head>
  <body>
    {{{body}}}
  </body>
</html>

about.handlebars

<h1>About Fin</h1>
<h2>Dotnet Team</h2>
<h3>{{dotnet}}</h3> 

错误快照:

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:1)

您需要从dotnetFin.js文件中导出getTeamData函数。所以只需改变,

var getTeamData = function () {
    return dotnetTeam;
};

exports.getTeamData = function () {
    return dotnetTeam;
};

,您的API应该有效。

您始终需要从节点模块(.js文件)中导出变量或方法,以便能够从需要该模块的其他文件中访问它们。

答案 1 :(得分:0)

require不仅包含文件,例如C / C ++中的includeThere is an own API for modules然后可以require d,但只需将dotnetFin.js文件更改为纯json文件即可轻松解决您的问题:

<强> dotnetFin.json

["V",  
"M", 
"A",  
"H", 
"A", 
"G", 
"K"]

然后只需要该文件:

var dotnetFin = require('./dotnetFin.json')

现在dotnetFis包含文件中定义的数组。