【问题标题】:FATAL ERROR: invalid array length Allocation failed when adding EJS to template致命错误:将 EJS 添加到模板时,无效的数组长度分配失败
【发布时间】:2017-09-10 01:08:13
【问题描述】:

我正在尝试从 node/express 遍历我在 EJS 中的 JSON 数据,当它位于第 6 个引脚时,将另一个引脚扔到 flexbox 中。

当我尝试以这种方式添加代码时,会弹出一个致命错误(blow)。我怎样才能在没有致命错误的情况下实现我想要做的事情?

谢谢!

<% for(i=0; i < articles.length; i++) { %>

                <div class="pin" style="margin:1.25rem;">
                    <a href="/blog/<%- articles[i].slug %>">
                            <img class="blog-img" src="<%- articles[i].image %>" alt="blog post" style="width:20%;"/>
                    </a>
                    <h2><%- articles[i].title %></h2>
                    <p>
                        <%- articles[i].summary %>
                    </p>
                    <a class="readmore" style="position:relative; margin-top:2rem;" href="/blog/<%- articles[i].slug %>">READ MORE</a>
                </div>



                <% if( i = 5 ) { %>
                    <div class="pin" style="margin:1.25rem;">
                        <img src="images/logo-dark@2x.png" alt="Dome Logo" />
                        <div class="form-group">
                            <input onSubmit="submitData()" id="prospect-form" type="email" placeholder="Email Address" class="form-control" style="vertical-align: baseline; display:inline-block; background-color: white; border: none;" />
                            <button onSubmit="submitData()" id="form-submit" onClick="submitData()" class="btn btn-active" type="submit" style="display: inline-block">Submit</button>
                        </div>
                    </div>

                <% } %>

    <% } %>

错误:

[5347:0x103000000]    37746 ms: Mark-sweep 372.1 (379.5) -> 372.0 (377.5) MB, 1362.6 / 0.0 ms  last resort 
[5347:0x103000000]    53315 ms: Mark-sweep 906.8 (912.3) -> 548.7 (556.8) MB, 197.0 / 0.4 ms  (+ 0.0 ms in 0 steps since start of marking, biggest step 0.0 ms, walltime since start of marking 15568 ms) allocation failure GC in old space requested


<--- JS stacktrace --->

==== JS stack trace =========================================

Security context: 0x359bac9a66a1 <JS Object>
    2: /* anonymous */ [0x3ebc6f402311 <undefined>:~1] [pc=0x5a9ee9bbaad](this=0x1f1e6d598689 <JS Global Object>,locals=0x1606c8d792c9 <an Object with map 0x31a5701d9701>,escape=0x1606c8d62179 <JS Function exports.escapeXML (SharedFunctionInfo 0x1606c8d616b1)>,include=0x1606c8d79281 <JS Function include (SharedFunctionInfo 0x1606c8d737c9)>,rethrow=0x1606c8d79239 <JS Function rethrow (SharedFunc...

FATAL ERROR: invalid array length Allocation failed - JavaScript heap out of memory
 1: node::Abort() [/Users//.nvm/versions/node/v7.7.4/bin/node]
 2: node::FatalException(v8::Isolate*, v8::Local<v8::Value>, v8::Local<v8::Message>) [/Users//.nvm/versions/node/v7.7.4/bin/node]
 3: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [/Users//.nvm/versions/node/v7.7.4/bin/node]
 4: v8::internal::Heap::AllocateUninitializedFixedArray(int) [/Users//.nvm/versions/node/v7.7.4/bin/node]
 5: v8::internal::Factory::NewUninitializedFixedArray(int) [/Users//.nvm/versions/node/v7.7.4/bin/node]
 6: v8::internal::(anonymous namespace)::FastElementsAccessor<v8::internal::(anonymous namespace)::FastPackedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)2> >::AddArguments(v8::internal::Handle<v8::internal::JSArray>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::Arguments*, unsigned int, v8::internal::(anonymous namespace)::Where) [/Users//.nvm/versions/node/v7.7.4/bin/node]
 7: v8::internal::(anonymous namespace)::DoArrayPush(v8::internal::Isolate*, v8::internal::BuiltinArguments) [/Users//.nvm/versions/node/v7.7.4/bin/node]
 8: 0x5a9ee48ed46

编辑: if 语句绝对会杀死我的机器。如果我把 if 语句留在那里,节点会使用 98% 的 CPU 和 1gb 的 RAM。如果我把它拿出来,它就会恢复正常。正常是大约 60MB 的内存和我的 CPU 的 0%。

【问题讨论】:

  • 您能否发布迭代本身以及 JSON 结构的示例?
  • 我在for循环中添加了
  • 也许this 可以提供帮助。
  • 我认为你应该 而不是
  • 已编辑。我撒谎了。

标签: javascript html node.js express ejs


【解决方案1】:

您的循环卡住了,因为您试图在 if 条件中将值 5 附加到 i,而不是使用 == 比较参数来检查其值。

你的if 声明应该是

<% if( i == 5 ) { %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 2018-08-20
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多