“path”参数必须是字符串类型。收到 TypeError 的实例。使用 mongoose 在 Node.js 中遇到此错误

问题描述 投票:0回答:2

这是错误 列出端口 4000 连接成功 节点:内部/错误:464
ErrorCaptureStackTrace(错误); ^

TypeError [ERR_INVALID_ARG_TYPE]:“path”参数必须是字符串类型。收到 TypeError 的实例 在新的 NodeError 处(节点:内部/错误:371:5) 在 validateString (节点:内部/验证器:119:11) 在扩展名(节点:路径:837:5) 在新视图 (D:\MERN\mernbackend ode_modules xpress\lib iew.js:56:14) 在 Function.render (D:\MERN\mernbackend ode_modules xpress\lib application.js:570:12) 在 ServerResponse.render (D:\MERN\mernbackend ode_modules xpress\lib esponse.js:1012:7) 在 D:\MERN\mernbackend\src pp.js:30:13 在 Layer.handle [作为handle_request] (D:\MERN\mernbackend ode_modules xpress\lib 外层.js:95:5) 接下来 (D:\MERN\mernbackend ode_modules xpress\lib 外 oute.js:137:13) 在 Route.dispatch (D:\MERN\mernbackend ode_modules xpress\lib 外 oute.js:112:3) { 代码:'ERR_INVALID_ARG_TYPE' }

这是app.js文件

const path = require('path');
const hbs = require('hbs');
const app = express();
require('./db/connect');
const port = process.env.PORT || 4000;

const templatePath = path.join(__dirname, '../templates/views')
const partialsPath = path.join(__dirname, '../templates/partials')
app.set('view engine', 'hbs');
app.set('views', templatePath)
hbs.registerPartials(partialsPath);

app.get('/', (req, res) => {
    res.render('index')
})

app.get('/register', (req, res) => {
    res.render('register')
})

app.get('/login', (req, res) => {
    res.render('login')
})

app.post('/register', async (req, res) => {
    try {
        console.log(req.body.fname);
    } catch (err) {
        res.render(err)
    }
})

app.listen(port, (err) => {
    console.log(`listing form port ${port}`);
})```

**this is register.hbs file**

      <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      {{>headLink}}
      <title>Register</title>
    </head>
    <body>
    
      <style>
        /* Chrome, Safari, Edge, Opera */
    input::-webkit-outer-spin-button,
    input::-webkit-inner-spin-button {
      -webkit-appearance: none;
      margin: 0;
    }
    
    /* Firefox */
    input[type=number] {
      -moz-appearance: textfield;
    }
    
    </style>
        {{>nav}}
    <form action="/register" method="POST">  
      
    <label> Firstname </label>         
    <input type="text" name="firstname" size="15"/> <br> <br>  
    <label> Middlename: </label>     
    <input type="text" name="middlename" size="15"/> <br> <br>  
    <label> Lastname: </label>         
    <input type="text" name="lastname" size="15"/> <br> <br>  
      
    <label>   
    Course :  
    </label>   
    <select>  
    <option value="Course">Course</option>  
    <option value="BCA">BCA</option>   
    <option value="BBA">BBA</option>  
    <option value="B.Tech">B.Tech</option>  
    <option value="MBA">MBA</option>  
    <option value="MCA">MCA</option>  
    <option value="M.Tech">M.Tech</option>  
    </select>  
      
    <br>  
    <br>  
    <label>   
    Gender :  
    </label><br>  
    <input type="radio" name="gender"/> Male <br>  
    <input type="radio" name="gender"/> Female <br>  
    <input type="radio" name="gender"/> Other  
    <br>  
    <br>  
      
    <label>   
    Phone :  
    </label>  
    <input type="text" name="country code"  value="+91" size="2"/>   
    <input type="number" name="phone" size="10"/> <br> <br>  
    Address  
    <br>  
    <textarea cols="80" rows="5" value="address" name="address">  
    </textarea>  
    <br> <br>  
    Email:  
    <input type="email" id="email" name="email"/> <br>    
    <br> <br>  
    Password:  
    <input type="Password" id="pass" name="pass"> <br>   
    <br> <br>  
    Re-type password:  
    <input type="Password" id="repass" name="repass"> <br> <br>  
    <input type="submit" value="register"/>  
    </form> 
    </body>
    </html>



node.js express mongoose mern
2个回答
2
投票

尝试在第 7 行的第二个参数中添加

/

const templatePath = path.join(__dirname, '/../templates/views')

第 8 行也类似


0
投票

我看到使用了 hbs 模块。在这种情况下,res.render 的第一个参数是 hbs 模板文件的名称,不带扩展名。

问题出在这几行:

} catch (err) {
    res.render(err)
}

您仅使用一个参数 res 来调用 res.render,即 TypeError 对象。 您可以从 err 中提取错误文本消息并将其以纯文本形式发送回来,如下所示:

res.send(err.stack);
© www.soinside.com 2019 - 2024. All rights reserved.