【问题标题】:cannot able to pass data from express to ejs?无法将数据从 express 传递到 ejs?
【发布时间】:2019-03-09 06:16:28
【问题描述】:

我尝试使用res.send("filename.ejs",data) 将数据从 js 文件 (sample.js) 传递到 ejs,方法是将对象转换为 JSON 数据显示在控制台上,但在尝试传递时显示错误

TypeError:无法在字符串上创建属性“_locals”

有人可以帮忙,告诉我如何在 ejs 文件中调用它们

【问题讨论】:

  • 请考虑发送edit 来澄清您的问题。同时,如果您需要将文件内容从您的 node/express 服务器发送到浏览器中的 ejs,请尝试res.sendFile()expressjs.com/en/4x/api.html#res.sendFile
  • 正如 O. Jones 所说,我们确实需要更多信息。您能否附上您的代码并详细描述您期望从客户端获得的输出?

标签: mysql express ejs


【解决方案1】:

res.send() 用于发送数据不需要指向ejs文件

res.send 将数组作为参数 (res.send([body])),你可以在 ejs 中获取它,例如 {{ data }}

例如

节点 res.send({message: 'hello'})

文件名.ejs

<div>{{ message }}</div> or <%= JSON.stringify(message)  %>

也因为 Express 5x 不支持 res.send() 方法你可以使用

res.status(200).send({message: 'hello})

(你不承认你的表达版本)

【讨论】:

    【解决方案2】:

    请注意,您应该res.render 中使用.ejs 扩展名,尽管您的问题的其他答案建议您这样做。
    当您调用res.render('myView') 时,ejs 会在名为 views 的文件夹中查找名为 myView.ejs 的模板(该文件夹被设置为 ejs 使用的默认文件夹)

    例如:

    res.render('myView.ejs',{
      data:data,
      foo:'foo'
    });
    

    ejs 将寻找一个名为 myView.ejs.ejs 的视图(或者它可能会一起失败)。

    要访问模板上的数据,您需要执行以下操作:

    app.js:

    app.get('/somePathHere', function(req, res) {
      res.render('myView',{
        data:data,
        foo:'foo'
      });
    });
    

    myView.ejs:

    <% data.forEach(function(item) { %>
        //do something
    
    <% }); %>
    
    <%= foo %>
    

    注意,当访问变量时,您使用&lt;%= varNameHere %&gt;,而在编写任何类型的函数时,您将省略=

    【讨论】:

      【解决方案3】:

      您正在向视图发送数据,因此请使用此更新您的代码并尝试

         res.render("filename",{
                              data:"hello"
                            });
      

      或者你可以传递整个数据

       res.render("filename",{data:data});
      

      然后在你的 ejs 文件中像这样访问它

       <div> <%= data %> <div>
      

      【讨论】:

      • 使用res.render('filename')的时候不能在文件名中使用.ejs...
      猜你喜欢
      • 2019-10-28
      • 1970-01-01
      • 2018-05-14
      • 2016-10-06
      • 2017-04-01
      • 2021-08-25
      • 1970-01-01
      • 2016-11-05
      相关资源
      最近更新 更多