-1

基本的な高速プロジェクトを作成しました。そして、ルートフォルダー内に lib/userhandler.js というファイルを作成しました。

//lib/userhandler.js
exports.addUser = function(req, res){
  // Set our internal DB variable
  var db = req.db;

  // Get our form values. These rely on the "name" attributes
  var uName = req.body.username;
  var uEmail = req.body.useremail;

  // Set our collection
  var collection = db.get('usercollection');

  // Submit to the DB
  collection.insert({
    "username" : uName,
    "email" : uEmail
  }, function (err, doc) {
    if (err) {
      // If it failed, return error
      res.send("There was a problem adding the information to the database.");
    }
    else {
      // If it worked, set the header so the address bar doesn't still say /adduser
      //res.location("userlist");
      // And forward to success page
      res.redirect("userlist");
    }
  });
}

私の routs/users.js ファイルでは、ユーザー ページが読み込まれるたびに、userhandler.js を介して名前とメールの値をデータベースに送信したいと考えています。

//routes/users.js
var express = require('express');
var router = express.Router();
var User = require("../node_modules/SimpleExpress/routes/userhandler.js");

var name = "testuser6";
var mail = "testuser6@testdomain.com";

/* GET users listing. */
router.get('/', function(req, res, next) {
  res.send('respond with a resource');
  User.addUser(name, mail);
});

module.exports = router;

ユーザーページを読み込もうとすると、「送信後にヘッダーを設定できません」と表示されます。

ありがとうございました

4

2 に答える 2

0

次のようなコールバックを介して、db からルート ハンドラにエラーを返すようにしてください。

//routes/users.js
var express = require('express');
var router = express.Router();
var User = require("../node_modules/SimpleExpress/routes/userhandler.js");

var name = "testuser6";
var mail = "testuser6@testdomain.com";

/* GET users listing. */
router.get('/', function(req, res, next) {
  User.addUser(name, mail, function(err, doc) {
    if(err) {
      res.send("There was a problem adding the information to the database.");
    } else {
      res.redirect("userlist");
    }
  });
});


//lib/userhandler.js
exports.addUser = function(name, mail, cb){
  // Set our internal DB variable
  var db = req.db;

  // Set our collection
  var collection = db.get('usercollection');

  // Submit to the DB
  collection.insert({
    "username" : name,
    "email" : mail
  }, function (err, doc) {
    cb(err, doc);
  });
}
于 2015-07-13T12:55:11.243 に答える
0

関数addUser()のパラメーターとしてリクエストオブジェクトとレスポンスオブジェクトを挿入しないでください。それらはルーターのコールバック関数にある必要があります。関数に新しいパラメーターを追加しました。これにより、リクエストオブジェクトをパラメーターとして受け取るルーターのおかげで、データベースをパラメーターとして渡すことができます。

//lib/userhandler.js
exports.addUser = function(uName, uEmail, db){

  var collection = db.get('usercollection');
  var result = true;
  
  collection.insert({
    "username" : uName,
    "email" : uEmail
  }, function (err) {
    if (err) {
      result = false;
    }
  });
  
  return result; // true or false
}

ここでもコードを変更して、name変数とemail変数をreqパラメーターとresパラメーターから受け取ることができるようにしました。

//routes/users.js
var express = require('express');
var router = express.Router();
var User = require("../node_modules/SimpleExpress/routes/userhandler.js");

//var name = "testuser6"; // I don't think you need this
//var mail = "testuser6@testdomain.com"; // and this

/* GET users listing. */
router.get('/', function(req, res, next) {
  res.send('respond with a resource');
  
  var db = req.db;
  var name = req.body.username;
  var mail = req.body.useremail; 
  
  if(!User.addUser(name, mail, db)) {
    res.send("There was a problem adding the information to the database.");
    return;
  }
  
  res.redirect('userlist');
});

module.exports = router;

時間がないのでコードをテストしていませんが、うまく動作することを願っています。

于 2015-07-13T12:55:35.900 に答える