我的问题
我正在尝试用node.js编写一个注册/登录页面,使用express.js。我已经决定将路由和应用程序初始化分成两个文件。当我用数据localhost:3000/register向{"username":"xyz","password":"xyz"}发送POST请求时,request对象具有属性主体。然而,当我试图访问这个属性时,我会得到未定义的。
我现在的代码
// app.js
// Load express and define port
const express = require('express');
const app = express();
const port = 3000;
// App Configurations
app.use(express.json())
// Load Routes
var registerRouter = require('./controllers/register.js');
// Use Routes
app.use('/register', registerRouter);
// Start App
app.listen(port, () => console.log(`Example app listening on port ${port}!`));// controllers/register.js
// requires
var argon2i = require('argon2-ffi').argon2i;
var bodyParser = require('body-parser');
var {Database, Model} = require('mongorito');
var crypto = require('crypto')
var Promise = require('bluebird');
var randomBytes = Promise.promisify(crypto.randomBytes);
var express = require('express');
// define router
var router = express.Router();
// Mongo Connection
const db = new Database('localhost/test', {
reconnectTries: 5
});
// Models
class User extends Model {}
// Register Models
db.register(User);
// Routes
router.post('/', async (res, req) => {
console.log(req.body);
if(!req.body) return req.sendStatus(400);
const username = req.body.username;
const salt = randomBytes(32);
const password = argon2i.hash(req.body.password, salt);
var user = new User({
username: username,
password: password,
salt: salt
});
await user.save;
res.send("User Created");
});
// Disconnect From Database
db.disconnect;
//export router
module.exports = router;我的预期结果
我希望能够访问req.body和req.body.username。
发布于 2020-03-12 04:18:48
代码中有一个小问题。router.post回调函数第一个参数是req,第二个参数是res。Callback function参数是固定的,不命名的参数。
您正在尝试获取response object上的主体,尽管参数的名称是req,但它仍然保存着response object。这就是问题的根源。
请换一下。
错误:
router.post('/', async (res, req) => {更正:
router.post('/', async (req, res) => {发布于 2020-03-12 04:25:16
我看到您正在控制器/寄存器中导入bodyParser,但没有设置它,至少在这个片段中是这样的。如果您没有任何特殊的理由把它放在控制器中,那么就这样做吧。
// app.js
// Load express and define port
const express = require('express');
const bodyParser = require('body-parser'); // new code
const app = express();
app.use(bodyParser.urlencoded({ extended: true })); // new code
const port = 3000;
// App Configurations
app.use(express.json())
// Load Routes
var registerRouter = require('./controllers/register.js');
// Use Routes
app.use('/register', registerRouter);
// Start App
app.listen(port, () => console.log(`Example app listening on port ${port}!`));https://stackoverflow.com/questions/60647472
复制相似问题