Node JS:500 服务器错误

3

我很新于node js领域,请多包涵。

我在dotNetFin.js中有一个json字符串数组。当我切换到关于页面时,出现了错误,命令提示窗口中显示“Undefined is not a function”。

如果将该json数组包含在app.js中,一切都正常。

这是我的代码:

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> 

错误快照:

输入图像描述

输入图像描述


3
在 dotnetFin.js 文件中,你是通过 module.exports.getTeamData = getTeamData 导出函数的吗? - Himmet Avsar
2个回答

4

您需要从dotnetFin.js文件中导出getTeamData函数。只需更改以下代码:

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

使用

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

你的 API 应该是可用的。

你总是需要从你的 Node 模块(.js 文件)中导出变量或方法,以便能够从其他需要该模块的文件中访问它们。


1

require 不像 C/C++ 中的 include 那样简单地包含文件。有一个专门用于模块化的 API 可以被 require,但是通过将你的 dotnetFin.js 文件更改为纯 json 文件可以更轻松地解决你的问题:

dotnetFin.json:

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

然后只需要求那个文件:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接