这是错误
列出端口 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>
尝试在第 7 行的第二个参数中添加
/
const templatePath = path.join(__dirname, '/../templates/views')
第 8 行也类似
我看到使用了 hbs 模块。在这种情况下,res.render 的第一个参数是 hbs 模板文件的名称,不带扩展名。
问题出在这几行:
} catch (err) {
res.render(err)
}
您仅使用一个参数 res 来调用 res.render,即 TypeError 对象。 您可以从 err 中提取错误文本消息并将其以纯文本形式发送回来,如下所示:
res.send(err.stack);