我的应用仅适用于端口3000。
如果我将端口更改为其他任何内容,它将起作用,但是当页面加载时会发生此错误。
abc未定义 在eval(编译时的eval(C:\ Users \ ASUS \ node_modules \ ejs \ lib \ ejs.js:549:12),:22:26) at returnedFn(C:\ Users \ ASUS \ node_modules \ ejs \ lib \ ejs.js:580:17) 在tryHandleCache(C:\ Users \ ASUS \ node_modules \ ejs \ lib \ ejs.js:223:34) 在View.exports.renderFile [作为引擎](C:\ Users \ ASUS \ node_modules \ ejs \ lib \ ejs.js:437:10) 在View.render(C:\ Users \ ASUS \ node_modules \ express \ lib \ view.js:128:8) 在tryRender(C:\ Users \ ASUS \ node_modules \ express \ lib \ application.js:640:10) 在EventEmitter.render(C:\ Users \ ASUS \ node_modules \ express \ lib \ application.js:592:3) 在ServerResponse.render(C:\ Users \ ASUS \ node_modules \ express \ lib \ response.js:971:7) 在C:\ Users \ ASUS \ Desktop \ nodeweb \ controllers \ index.js:21:6 在Layer.handle [as handle_request](C:\ Users \ ASUS \ node_modules \ express \ lib \ router \ layer.js:95:5)
abc是我在index.ejs中使用的变量,在路由器中定义。
var express = require('express');
var router = express.Router();
router.get('/', function(req, res) {
res.render('index', {abc: 23})
});
module.exports = router;
我正在使用节点应用命令启动我的服务器
var app = express();
app.set('view engine', 'ejs')
app.use(express.static(__dirname + '/public'));
app.use(require('./controllers'))
app.listen(8080, function() {
console.log('Listening on port 8080...')
})
我想我发现了这个问题 它在我使用
时有效app.use('/', function(req, res) {
res.render('index', {tit:[1,2,3,4,5]});
})
而不是
app.use(require('./controllers'))
但为什么?
它只是自行修复,现在正常工作,我不知道为什么。太糟糕了。
答案 0 :(得分:0)
您可以尝试对端口进行硬编码: app.set(“port”,process.env.PORT || 3000);
或者这个: $ PORT = 8080节点app.js
此外,如果您不在Windows上,并且想要使用1024以下的端口,请首先尝试: sudo PORT = 80节点app.js
答案 1 :(得分:0)
如果要将路由处理程序放在单独的文件中,则可以,只需要使用app.use(...)
调用该文件即可。
相反,您可以这样做:
require('./controllers');
它与abc
变量无关。
答案 2 :(得分:0)
这是因为我认为控制器没有正确导入。如果你这样写,我想,它会正常工作
var router = require('express').Router();
router.get('/', function(req, res) {
res.render('index', {abc: 23})
});
module.exports = router;
var app = express();
var route = require('./router')
app.set('view engine', 'ejs')
app.use(express.static(__dirname + '/public'));
app.use('/',route);
app.listen(8080, function() {
console.log('Listening on port 8080...')
})
在require('./router')
中定义var route = require('./router')
时要小心,因为它是相对的,所以它完全取决于您的文件夹结构。