NodeJs 使用 ExpressJs : TypeError: string is not a function at Function.app.render

Posted

技术标签:

【中文标题】NodeJs 使用 ExpressJs : TypeError: string is not a function at Function.app.render【英文标题】:NodeJs Using ExpressJs : TypeError: string is not a function at Function.app.render 【发布时间】:2013-10-30 08:05:44 【问题描述】:

我刚开始学习 Node,我正在尝试使用 Node 和 Express 构建一个 Web 应用程序。我的 app.js 文件中有以下代码,目录结构如下。

目录结构:

app
   assets
   controller
   model
   view
      index.jade
global
node_modules
app.js
package.json

-js-

var express = require('express');
var app = express();

app.configure(function() 
  app.set('view', __dirname + '/app/view');
  app.set('view engine', 'jade');
  app.use(app.router);
);

app.get('/', function(req, res)
    res.render('index', title: 'express');
);

app.listen(3000);
console.log('Listening on port 3000');

运行命令 node app 并转到 localhost:3000 后。我收到以下错误。我假设它不喜欢这一行的字符串 -> res.render('index', title: 'express');。但是,从我在 Google 上找到的所有内容来看,这似乎是正确的。所以我一定是错过了其他东西。

错误消息:

TypeError: string is not a function at Function.app.render (C:\myapp\express\node_modules\express\lib\application.js:488:12) at ServerResponse.res.render (C:\myapp\ express\node_modules\express\lib\response.js:803:7) 在 C:\myapp\express\app.js:19:6 在回调 (C:\myapp\express\node_modules\express\lib\router\index .js:164:37) 在参数 (C:\myapp\express\node_modules\express\lib\router\index.js:138:11) 在传递 (C:\myapp\express\node_modules\express\lib\router \index.js:145:5) 在 Router._dispatch (C:\myapp\express\node_modules\express\lib\router\index.js:173:5) 在 Object.router (C:\myapp\express\node_modules \express\lib\router\index.js:33:10) 在下一个 (C:\myapp\express\node_modules\express\node_modules\connect\lib\proto.js:190:15) 在 Object.expressInit [作为句柄] (C:\myapp\express\node_modules\express\lib\middleware.js:30:5)

【问题讨论】:

【参考方案1】:

我认为这只是设置“view”(单数)而不是“views”(复数)的错字/错误。看看这个例子。我认为 express 应用程序对象同时具有“视图”和“视图”设置,但它们的含义不同。

https://github.com/visionmedia/express/blob/master/examples/jade/index.js

这是你要明确的解决方法:

  app.set('views', __dirname + '/app/view');

【讨论】:

是的,这似乎是问题所在。当然,现在我有一个新的缩进错误。但我可以解决这个问题。我假设views 与我的目录名称匹配。猜我错了。无论如何感谢您的帮助。 是的,TJ 是一位命名大师,最初非常令人困惑,但一旦你开始使用它就会简洁。 app.getapp.useapp.configure 抛出新手循环。这个应该只是app.set('viewPath')恕我直言。您也可以删除 app.configure 包装,因为它正在完成精确的深蹲。

以上是关于NodeJs 使用 ExpressJs : TypeError: string is not a function at Function.app.render的主要内容,如果未能解决你的问题,请参考以下文章

使用async/await——Nodejs+ExpressJs+Babel

使用 nodejs 和 expressjs 的 flash 套接字策略

NodeJs + ExpressJs 应用程序路由奇怪的行为

刷新页面显示找不到文件错误如何使用 [angular js + NodeJS/ExpressJS] 解决

无法使用 NodeJS/ExpressJS 和 Postman 获取 POST 数据

如何使用 nodejs 模块 http2 将 http2 与 ExpressJS 集成?