2015-10-20 125 views
2

我对这个节点js的东西有点新。所以,请忍受我。节点JS:500服务器错误

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

此外,如果我包括在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

在dotnetFin.js中,是否通过'module.exports.getTeamData = getTeamData'输出函数? –

回答

1

您需要将您的getTeamData函数从dotnetFin.js文件导出。因此,只要改变,

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

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

和你的API应该工作。

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

0

require不仅仅包含该文件,例如C/C++中的include

dotnetFin.json

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

,然后只需要There is an own API for modules然后可以require d,但是你的情况下,可以通过只是更改dotnetFin.js文件,以一个纯粹的JSON文件解决了很多更容易该文件:

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

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