【问题标题】:Second ejs file not picking data Nodejs第二个ejs文件没有选择数据Nodejs
【发布时间】:2021-07-30 08:19:59
【问题描述】:

所以,基本上我是在尝试链接两个ejs文件来表达。第一个已连接并显示结果,但在第一个按下按钮后出现的第二个显示错误。

user-list 文件正确显示结果,但完全相同的表代码在parks 中显示错误

parks.ejs(当我点击 user-list 中重定向到这里的链接时,它显示 userData 未定义)

<div class="table-data">
        <h2>Display Data using Node.js & MySQL</h2>
            <table>
                <tr>
                    <th>ID</th>
                    <th>Station N</th>
                    
                    <th>Edit</th>
                    <th>Delete</th>
                </tr>
                
                <%
                if(userData.length!=0){
                var i=1;
                userData.forEach(function(data){
                %>
                <tr>
                    <td><%=i; %></td>
                    <td><%=data.Station %></td>
                    
                    <td><a href="/users/edit/<%=data.id%>">Edit</a></td>
                    <td><a href="/users/delete/<%=data.id%>">Delete</a></td>
                </tr>
                <%  i++; }) %>
                <% } else{ %>
                    <tr>
                        <td colspan="7">No Data Found</td>
                    </tr>
                <% } %>
            </table>
            </div>

user-list.ejs

<a href="/parks"> hello</a>
++the table code shown above

users.js

var express = require('express');
var router = express.Router();
var db = require('../database');



router.get('/user-list', function(req, res, next) {

    db.query("SELECT Station_ID FROM Station WHERE Name = 'A'", function (err, results, fields) {
        if (err) throw err;
        res.render('user-list', { title: 'User List', userData: results});
  });
});

router.get('/parks', function(req, res, next) {                //this part not working

    db.query("SELECT Station_ID FROM Station WHERE Name = 'A'", function (err, results, fields) {
        if (err) throw err;
        res.render('parks', { title: 'User Listt', userData: results});
  });
});


module.exports = router;

值得注意的是app.js 文件,因为我必须在其中添加app.get("/parks" 行来链接两个页面,否则即使链接也不会重定向到parks.ejs

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
const ejs = require('ejs'); 

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

app.get("/parks", function(req,res){
  res.render("parks");
});


// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

【问题讨论】:

    标签: mysql node.js express ejs


    【解决方案1】:
    <a href="/parks"> hello</a>
    

    这里的 url 是相对于文档根目录的,所以这将触发你的 app.get("/parks") 路由处理程序 - 实际上它似乎没有提供 userData 变量。

    如果你想从你的用户路由器触发router.get('/parks')处理程序,你应该使用一个相对于当前路径的url。

    <a href="parks"> hello</a>
    

    <a href="/users/parks"> hello</a>
    

    【讨论】:

    • 那么,app.get 是否有必要
    • 这取决于您是否真的想在 /parks 路径上提供 parks 模板。如果是这样并且您实际上没有提供 userData 值,则 parks 模板应在尝试访问其 lengthforEach() 属性之前包含一些完整性检查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多